singleton method Socket.tcp_server_sockets

tcp_server_sockets(port) -> [Socket][permalink][rdoc][edit]
tcp_server_sockets(host, port) -> [Socket]
tcp_server_sockets(port) {|sockets| ...} -> object
tcp_server_sockets(host, port) {|sockets| ...} -> object

TCP/IP で host:port で待ち受けるサーバ側のソケットを作成します。

ブロックなしの場合は、ソケットオブジェクトの配列を返します。

ブロック付きの場合は、ソケットオブジェクトをそのブロックに渡して呼び出します。ブロック終了時にそれらのソケットを閉じます。返り値はブロックの評価値となります。

port が 0 の場合は、実際のポート番号は動的に選ばれます。ただし返り値のソケットはすべて同じ番号を持ちます。

require 'socket'

# tcp_server_sockets returns は2つのソケットを返す
sockets = Socket.tcp_server_sockets(1296)
p sockets #=> [#<Socket:fd 3>, #<Socket:fd 4>]

# それぞれは IPv4 と IPv6 のソケット
sockets.each {|s| p s.local_address }
#=> #<Addrinfo: [::]:1296 TCP>
#   #<Addrinfo: 0.0.0.0:1296 TCP>

# ポート番号を動的に選んでも IPv6 と IPv4 で同じポート番号を持つ
sockets = Socket.tcp_server_sockets(0)
sockets.each {|s| p s.local_address }
#=> #<Addrinfo: [::]:53114 TCP>
#   #<Addrinfo: 0.0.0.0:53114 TCP>

# ブロックにソケットの配列が渡される
Socket.tcp_server_sockets(0) {|sockets|
  p sockets #=> [#<Socket:fd 3>, #<Socket:fd 4>]
}
[PARAM] host:
割り当てるホスト名
[PARAM] port:
割り当てるポート番号

[SEE_ALSO] Socket.tcp_server_loop