本文简要介绍ruby语言中 BasicSocket.recv_nonblock 的用法。
用法
recv_nonblock(maxlen [, flags [, buf [, options ]]]) → mesg
在为底层文件说明符设置 O_NONBLOCK 后,使用 recvfrom(2) 从 socket 接收最多 maxlen 字节。 flags 是零个或多个 MSG_ 选项。结果 mesg 是接收到的数据。
当 recvfrom(2) 返回 0 时, Socket#recv_nonblock 返回一个空字符串作为数据。含义取决于套接字:TCP上的EOF,UDP上的空包等。
参数
-
maxlen- 从套接字接收的字节数 -
flags- 零个或多个MSG_选项 -
buf- 目标String缓冲区 -
options- 关键字哈希,支持“异常:假”
示例
serv = TCPServer.new("127.0.0.1", 0)
af, port, host, addr = serv.addr
c = TCPSocket.new(addr, port)
s = serv.accept
c.send "aaa", 0
begin # emulate blocking recv.
p s.recv_nonblock(10) #=> "aaa"
rescue IO::WaitReadable
IO.select([s])
retry
end
如果对 recv_nonblock 的调用失败,请参阅 Socket#recvfrom 以了解可能引发的异常。
BasicSocket#recv_nonblock 可能引发与 recvfrom(2) 失败相对应的任何错误,包括 Errno::EWOULDBLOCK。
如果异常是 Errno::EWOULDBLOCK 或 Errno::EAGAIN,则通过 IO::WaitReadable 对其进行扩展。所以 IO::WaitReadable 可以用来挽救重试recv_nonblock的异常。
通过将关键字参数 exception 指定为 false ,您可以指示 recv_nonblock 不应引发 IO::WaitReadable 异常,而是返回符号 :wait_readable。
参看
相关用法
- Ruby BasicSocket.recv用法及代码示例
- Ruby BasicSocket.recvmsg用法及代码示例
- Ruby BasicSocket.remote_address用法及代码示例
- Ruby BasicSocket.send用法及代码示例
- Ruby BasicSocket.do_not_reverse_lookup用法及代码示例
- Ruby BasicSocket.do_not_reverse_lookup =用法及代码示例
- Ruby BasicSocket.connect_address用法及代码示例
- Ruby BasicSocket.getsockopt用法及代码示例
- Ruby BasicSocket.getpeereid用法及代码示例
- Ruby BasicSocket.local_address用法及代码示例
- Ruby BasicSocket.shutdown用法及代码示例
- Ruby BasicSocket.close_read用法及代码示例
- Ruby BasicSocket.getpeername用法及代码示例
- Ruby BasicSocket.getsockname用法及代码示例
- Ruby BasicSocket.sendmsg用法及代码示例
- Ruby BasicSocket.close_write用法及代码示例
- Ruby BasicSocket.setsockopt用法及代码示例
- Ruby BasicSocket.for_fd用法及代码示例
- Ruby BasicSpecification.require_paths用法及代码示例
- Ruby BasicObject.equal?用法及代码示例
- Ruby BasicObject.instance_eval用法及代码示例
- Ruby BasicObject.obj ==用法及代码示例
- Ruby BasicObject.method_missing用法及代码示例
- Ruby BasicObject.singleton_method_undefined用法及代码示例
- Ruby BasicObject.send用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 BasicSocket.recv_nonblock。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
