[ruby-core:102758] [Ruby master Bug#10203] TCPServer.new has strange behaviour when EADDRINUSE without specifying hostname
From:
merch-redmine@...
Date:
2021-03-06 00:52:42 UTC
List:
ruby-core #102758
Issue #10203 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Feedback to Closed
I think this is not a bug and can be closed. `TCPServer.new` using first `getaddrinfo` address that works is reasonable behavior if no address is specified. If you require a specific address, you should specify it. As @akr mentioned, `Socket.tcp_server_sockets` is a better way to handle the situation if you want to listen on both IPv4 and IPv6 addresses.
----------------------------------------
Bug #10203: TCPServer.new has strange behaviour when EADDRINUSE without specifying hostname
https://bugs.ruby-lang.org/issues/10203#change-90771
* Author: lucas (Lucas Nussbaum)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 2.1.2p95
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
after:
irb(main):003:0> TCPServer::new(10001)
=> #<TCPServer:fd 9>
I get irb listening to port 10001 using IPv4, but not IPv6:
tcp 0 0 0.0.0.0:10001 0.0.0.0:* LISTEN 1000 376068 24437/irb
a second creation also works, but only binds the IPv6 address:
irb(main):004:0> TCPServer::new(10001)
=> #<TCPServer:fd 10>
tcp6 0 0 :::10001 :::* LISTEN 1000 376098 24437/irb
=> I would have expected the first creation to bind to both IPv4 and IPv6, not just IPv4, and the second attempt to fail.
Trying once again, the creation fails with a strange exception:
irb(main):007:0> TCPServer::new(10001)
TypeError: no implicit conversion of nil into String
from (irb):7:in `initialize'
from (irb):7:in `new'
from (irb):7
from /usr/bin/irb:11:in `<main>'
Binding explicitely to 0.0.0.0 avoids this:
irb(main):005:0> TCPServer::new('0.0.0.0', 10002)
=> #<TCPServer:fd 11>
irb(main):006:0> TCPServer::new('0.0.0.0', 10002)
Errno::EADDRINUSE: Address already in use - bind(2) for "0.0.0.0" port 10002
from (irb):6:in `initialize'
from (irb):6:in `new'
from (irb):6
from /usr/bin/irb:11:in `<main>'
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>