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


Ruby TCPServer.accept_nonblock用法及代碼示例

本文簡要介紹ruby語言中 TCPServer.accept_nonblock 的用法。

用法

accept_nonblock([options]) → tcpsocket

在為底層文件說明符設置 O_NONBLOCK 後,使用 accept(2) 接受傳入連接。它為傳入連接返回一個接受的 TCPSocket

示例

require 'socket'
serv = TCPServer.new(2202)
begin # emulate blocking accept
  sock = serv.accept_nonblock
rescue IO::WaitReadable, Errno::EINTR
  IO.select([serv])
  retry
end
# sock is an accepted socket.

如果對 TCPServer#accept_nonblock 的調用失敗,請參閱 Socket#accept 以了解可能引發的異常。

TCPServer#accept_nonblock 可能引發與accept(2) 失敗相對應的任何錯誤,包括Errno::EWOULDBLOCK。

如果異常是 Errno::EWOULDBLOCK、Errno::EAGAIN、Errno::ECONNABORTED、Errno::EPROTO,則通過 IO::WaitReadable 對其進行擴展。所以 IO::WaitReadable 可以用來挽救重試accept_nonblock的異常。

通過將關鍵字參數 exception 指定為 false ,您可以指示 accept_nonblock 不應引發 IO::WaitReadable 異常,而是返回符號 :wait_readable

參看

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 TCPServer.accept_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。