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