Hi, the following script shows that UDPSocket#bind fails if the given
IP is IPv6 (however TCPServer does not fail). It occurs with Ruby 1.8
and 1.9.X.
My computer has IPv4 and IPv6 (using Miredo/Teredo).
The script:
···
-------------------------------------------------------------
#!/usr/bin/ruby
require "socket"
IPv4 = "192.168.1.12"
IPv6 = "2001:0:53aa:64c:187c:3ecb:3419:d1a6"
PORT = 9999
begin
puts "1) binding in IPv4 TCP..."
s4 = TCPServer.open IPv4, PORT
puts "=> OK"
rescue => e
$stderr.puts "#{e.class}: #{e}"
end
begin
puts "2) binding in IPv6 TCP..."
s4 = TCPServer.open IPv6, PORT
puts "=> OK"
rescue => e
$stderr.puts "#{e.class}: #{e}"
end
begin
puts "3) binding in IPv4 UDP..."
s4 = UDPSocket.new
s4.bind IPv4, PORT
puts "=> OK"
rescue => e
$stderr.puts "#{e.class}: #{e}"
end
begin
puts "4) binding in IPv6 UDP..."
s4 = UDPSocket.new
s4.bind IPv6, PORT
puts "=> OK"
rescue => e
$stderr.puts "#{e.class}: #{e}"
end
-------------------------------------------------------------
Result of the script:
----------------------
1) binding in IPv4 TCP...
=> OK
2) binding in IPv6 TCP...
=> OK
3) binding in IPv4 UDP...
=> OK
4) binding in IPv6 UDP...
Errno::EAFNOSUPPORT: Address family not supported by protocol - bind(2)
----------------------
Is it a known issue? If not I will report it.
--
Iñaki Baz Castillo
<ibc@aliax.net>