当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Socket.connect_nonblock用法及代码示例


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