[ruby-list:50448] Re: WindowsでTCPServerをホスト指定しないで動かすと他ホストから接続できない
From:
Toshihiko Ichida <dogatana@...>
Date:
2016-11-04 14:19:50 UTC
List:
ruby-list #50448
市田です。
On 2016/11/03 22:40, Toshihiko Ichida wrote:
> 実行結果: localhost を指定
> > ruby server.rb
> ["AF_INET6", 3000, "::", "::"]
もう少し複雑?なようです。
> irb
irb(main):001:0> require 'socket'
=> true
irb(main):002:0> s1 = TCPServer.new(3000)
=> #<TCPServer:fd 3>
irb(main):003:0> s1.addr
=> ["AF_INET6", 3000, "::", "::"]
irb(main):004:0> s2 = TCPServer.new(3000)
=> #<TCPServer:fd 4>
irb(main):005:0> s2.addr
=> ["AF_INET", 3000, "0.0.0.0", "0.0.0.0"]
irb(main):006:0> s3 = TCPServer.new(3000)
Errno::EADDRINUSE: Only one usage of each socket address
(protocol/network address
port) is normally permitted. - bind(2) for nil port 3000
from (irb):6:in `initialize'
from (irb):6:in `new'
from (irb):6
from C:/Programs/ruby/bin/irb.cmd:19:in `<main>'
1回目 IPv6 Port 3000
2回目 IPv6 Port 3000(このとき1回目のインスタンスも有効)
3回目 既に bind されているのでエラー
という動きになっています。
UbuntuおよびBash on Ubuntu on Windows では1回目から IPv4
になり、挙動が異なります。
これが Windows版での実装仕様なのかどうかはわかりません。