本文簡要介紹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 UDPSocket.new用法及代碼示例
- Ruby UDPSocket.send用法及代碼示例
- Ruby UDPSocket.connect用法及代碼示例
- Ruby UDPSocket.bind用法及代碼示例
- Ruby UndefinedConversionError.source_encoding用法及代碼示例
- Ruby UnboundMethod.original_name用法及代碼示例
- Ruby URI.parse用法及代碼示例
- Ruby UID.change_privilege用法及代碼示例
- Ruby Util.unescape用法及代碼示例
- Ruby Util.url_encode用法及代碼示例
- Ruby UNIXSocket.new用法及代碼示例
- Ruby UNIXSocket.addr用法及代碼示例
- Ruby UnboundMethod.bind用法及代碼示例
- Ruby URI模塊用法及代碼示例
- Ruby UNIXServer.accept用法及代碼示例
- Ruby UNIXSocket.recv_io用法及代碼示例
- Ruby UID.euid用法及代碼示例
- Ruby UncaughtThrowError類用法及代碼示例
- Ruby Util.pretty用法及代碼示例
- Ruby UID.uid用法及代碼示例
- Ruby UnwindDetails.all_requirements用法及代碼示例
- Ruby UnboundMethod類用法及代碼示例
- Ruby UnwindDetails.reversed_requirement_tree_index用法及代碼示例
- Ruby UnboundMethod.parameters用法及代碼示例
- Ruby Util.rfc1123_date用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 UDPSocket.recvfrom_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。