本文簡要介紹ruby語言中 Socket.connect_nonblock
的用法。
用法
connect_nonblock(remote_sockaddr, [options]) → 0
在為基礎文件說明符設置 O_NONBLOCK 後,請求在給定的 remote_sockaddr
上建立連接。如果成功則返回 0,否則引發異常。
參數
# +remote_sockaddr+ - the +struct+ sockaddr contained in a string or Addrinfo object
例子:
# Pull down Google's web page
require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(80, 'www.google.com')
begin # emulate blocking connect
socket.connect_nonblock(sockaddr)
rescue IO::WaitWritable
IO.select(nil, [socket]) # wait 3-way handshake completion
begin
socket.connect_nonblock(sockaddr) # check connection failure
rescue Errno::EISCONN
end
end
socket.write("GET / HTTP/1.0\r\n\r\n")
results = socket.read
如果對 connect_nonblock
的調用失敗,請參閱 Socket#connect
以了解可能引發的異常。
Socket#connect_nonblock
可能引發與 connect(2) 失敗相對應的任何錯誤,包括 Errno::EINPROGRESS。
如果異常是 Errno::EINPROGRESS,則通過 IO::WaitWritable
對其進行擴展。所以 IO::WaitWritable
可以用來挽救重試connect_nonblock的異常。
通過將關鍵字參數 exception
指定為 false
,您可以指示 connect_nonblock
不應引發 IO::WaitWritable
異常,而是返回符號 :wait_writable
。
參看
# Socket#connect
相關用法
- Ruby Socket.connect用法及代碼示例
- 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.accept用法及代碼示例
- 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.accept_nonblock用法及代碼示例
- Ruby Socket.recvfrom用法及代碼示例
- Ruby Socket.unix用法及代碼示例
- Ruby Socket.gethostbyaddr用法及代碼示例
- Ruby Socket.ip_address_list用法及代碼示例
- Ruby Socket.sysaccept用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Socket.connect_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。