Ruby 2.0.0 リファレンスマニュアル > ライブラリ一覧 > socketライブラリ > UDPSocketクラス > recvfrom_nonblock

instance method UDPSocket#recvfrom_nonblock

recvfrom_nonblock(maxlen, flags=0) -> [String, Array][permalink][rdoc]

ソケットをノンブロッキングモードに設定した後、 recvfrom(2) でソケットからデータを受け取ります。

maxlen で受け取るデータの最大バイト数を指定します。

flags はフラグで、Socket::MSG_* の bitwise OR を渡します。 詳しくは recvfrom(2) を参照してください。

返り値はデータの文字列と送り元のアドレス情報の 2要素の配列となります。

recvfrom(2) がエラーになった場合、 Errno::EAGAIN, Errno::EINTR を含め例外 Errno::EXXX が発生します。 Errno::EWOULDBLOCK、Errno::EAGAIN のような待ってからリトライすることが 可能であることを意味する例外には、IO::WaitReadable が extend されています。

require 'socket'
s1 = UDPSocket.new
s1.bind("127.0.0.1", 0)
s2 = UDPSocket.new
s2.bind("127.0.0.1", 0)
s2.connect(*s1.addr.values_at(3,1))
s1.connect(*s2.addr.values_at(3,1))
s1.send "aaa", 0
begin # emulate blocking recvfrom
  p s2.recvfrom_nonblock(10)
  #=> ["aaa", ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]
rescue IO::WaitReadable
  IO.select([s2])
  retry
end
[PARAM] maxlen:
受け取るデータの最大バイト数
[PARAM] flags:
フラグ

[SEE_ALSO] IPSocket#recvfrom