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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。