WEBRick::HTTPServer creates ipv6only socket for host `::`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 38/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- ruby
- Área
- backend, networking
Línea de trabajo
Comience en lib/webrick/utils.rb, línea 60, y reproduzca el problema con el ejemplo de WEBrick::HTTPServer usando Host: '::'. Compare su comportamiento de socket con TCPServer.new('::', 8080), comprobando con ss -tlne v6only y la escucha en dual-stack. El trabajo estará terminado cuando el host comodín IPv6 de WEBrick se comporte como se espera para el tráfico IPv4 e IPv6 en los sistemas Linux afectados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
The IPv6 host :: is kind of analogous to the IPv4 address 0.0.0.0, however it should usually (depending on the OS) listen for traffic coming from IPv4 and IPv6 addresses, unless specified differently by the OS.
However, i have observed that across different linux distros i have tried (manjaro, arch, debian), WEBRick will open its socket in ipv6-only mode.
I assume that the reason is this line as using the Socket.tcp_server_sockets function manually leads to the same result.
However, e.g. using the TCPServer from the socket stdlib opens a socker that's not in ipv6-only mode.
Sample code i have used:
require 'webrick'
server = WEBrick::HTTPServer.new Port: 8080, Host: '::', DocumentRoot: '~/'
trap 'INT' do
server.shutdown
end
server.start
I have tested this with webrick 1.7.0 on ruby 3.1.1 and on ruby 2.6.3, both yielding the same result.
I have observed the mode using ss -tlne, where the local address is shown as [::]:8080, which indicates ipv6-only mode in ss, while it should be *:8080 in non-ipv6-only mode.
It also says v6only:1 in the process description, while it should say v6only:0.
Also here's the sample code using TCPServer that correctly opens the socket:
require 'socket'
server = TCPServer.new('::', 8080)
loop do
client = server_socket.accept
client.puts 'hello'
client.close
end
- Lenguaje dominante
- Ruby
- Estrellas
- 327
- Forks
- 113
- Merge medio
- 4 h 2 min
- PR fusionados (30 d)
- 1
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ruby/webrick
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
Todos los issues de ruby/webrick
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
simp/pupmod-simp-simp#395 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
simp/pupmod-simp-rsyslog#219 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
simp/pupmod-simp-pupmod#256 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
simp/pupmod-simp-sudo#150 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100