市田です。

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版での実装仕様なのかどうかはわかりません。