当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby UDPSocket.recvfrom_nonblock用法及代码示例


本文简要介绍ruby语言中 UDPSocket.recvfrom_nonblock 的用法。

用法

recvfrom_nonblock(maxlen [, flags[, outbuf [, options]]]) → [mesg, sender_inet_addr]

在为底层文件说明符设置 O_NONBLOCK 后,使用 recvfrom(2) 从 udpsocket 接收最多 maxlen 字节。 flags 是零个或多个 MSG_ 选项。结果的第一个元素 mesg 是接收到的数据。第二个元素 sender_inet_addr 是一个表示发送方地址的数组。

当 recvfrom(2) 返回 0 时, Socket#recvfrom_nonblock 返回一个空字符串作为数据。这意味着一个空包。

参数

  • maxlen - 从套接字接收的字节数

  • flags - 零个或多个 MSG_ 选项

  • outbuf - 目标 String 缓冲区

  • options - 关键字哈希,支持“异常:假”

示例

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

如果对 recvfrom_nonblock 的调用失败,请参阅 Socket#recvfrom 以了解可能引发的异常。

UDPSocket#recvfrom_nonblock 可能引发与 recvfrom(2) 失败相对应的任何错误,包括 Errno::EWOULDBLOCK。

如果异常是 Errno::EWOULDBLOCK 或 Errno::EAGAIN,则通过 IO::WaitReadable 对其进行扩展。所以 IO::WaitReadable 可以用来挽救重试recvfrom_nonblock的异常。

通过将关键字参数 exception 指定为 false ,您可以指示 recvfrom_nonblock 不应引发 IO::WaitReadable 异常,而是返回符号 :wait_readable

参看

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 UDPSocket.recvfrom_nonblock。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。