From: GOTOU Yuuzou Date: 2001-12-17T17:03:47+09:00 Subject: [ruby-dev:15474] Re: listen for sockets in both IPv4 and IPv6 In message <20011217.092245.130324043.ryoh@jaist.ac.jp>, `Ryo HAYASAKA ' wrote: > 現状では IPv6 の方のみ LISTEN します. (ruby 1.7.2 (2001-12-13) [i386-netbsdelf]) NetBSD の場合は、 # sysctl -w net.inet6.ip6.bindv6only=0 とすることで、IPv4射影アドレスのサポートが有効になって、IPv4 と IPv6 の両方からの接続を受けられるようです。 この機能が使えない場合には sample/dualstack-httpd.rb のように、 Socket::getaddrinfo が返す全てのアドレスをバインドする必要があ るのではないかと思います。 require 'socket' port = 8080 res = Socket::getaddrinfo(nil, port, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE) listeners = [] last_error = nil res.each{|ai| begin listeners << TCPServer.new(ai[3], port) rescue $stderr.puts "TCPServer Error: #{$!}" last_error = $! end } raise last_error if listeners.empty? while fds = IO.select(listeners) fds[0].each{|s| ns = s.accept p [ ns.peeraddr, ns.addr ] # ... ns.close } end -- ごとうゆうぞう