當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby BasicSocket.recv_nonblock用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 BasicSocket.recv_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。