本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
