本文簡要介紹ruby語言中  Socket.accept_nonblock  的用法。
用法
accept_nonblock([options]) → [client_socket, client_addrinfo]在為底層文件說明符設置 O_NONBLOCK 後,使用 accept(2) 接受傳入連接。它返回一個數組,其中包含傳入連接的接受套接字 client_socket 和  Addrinfo  、 client_addrinfo 。
示例
# In one script, start this first
require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(2200, 'localhost')
socket.bind(sockaddr)
socket.listen(5)
begin # emulate blocking accept
  client_socket, client_addrinfo = socket.accept_nonblock
rescue IO::WaitReadable, Errno::EINTR
  IO.select([socket])
  retry
end
puts "The client said, '#{client_socket.readline.chomp}'"
client_socket.puts "Hello from script one!"
socket.close
# In another script, start this second
require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(2200, 'localhost')
socket.connect(sockaddr)
socket.puts "Hello from script 2."
puts "The server said, '#{socket.readline.chomp}'"
socket.close如果對 accept_nonblock 的調用失敗,請參閱  Socket#accept  以了解可能引發的異常。
 Socket#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 Socket.accept用法及代碼示例
- Ruby Socket.pair用法及代碼示例
- Ruby Socket.udp_server_sockets用法及代碼示例
- Ruby Socket.unpack_sockaddr_in用法及代碼示例
- Ruby Socket.udp_server_recv用法及代碼示例
- Ruby Socket.new用法及代碼示例
- Ruby Socket.tcp用法及代碼示例
- Ruby Socket.getservbyport用法及代碼示例
- Ruby Socket.listen用法及代碼示例
- Ruby Socket.gethostname用法及代碼示例
- Ruby Socket.unix_server_loop用法及代碼示例
- Ruby Socket.sockaddr_un用法及代碼示例
- Ruby Socket.recvfrom_nonblock用法及代碼示例
- Ruby Socket.tcp_server_sockets用法及代碼示例
- Ruby Socket.bind用法及代碼示例
- Ruby Socket.getaddrinfo用法及代碼示例
- Ruby Socket.getnameinfo用法及代碼示例
- Ruby Socket.unix_server_socket用法及代碼示例
- Ruby Socket.recvfrom用法及代碼示例
- Ruby Socket.unix用法及代碼示例
- Ruby Socket.gethostbyaddr用法及代碼示例
- Ruby Socket.ip_address_list用法及代碼示例
- Ruby Socket.sysaccept用法及代碼示例
- Ruby Socket.getservbyname用法及代碼示例
- Ruby Socket.connect_nonblock用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Socket.accept_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
