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


Ruby Socket.connect用法及代碼示例


本文簡要介紹ruby語言中 Socket.connect 的用法。

用法

connect(remote_sockaddr) → 0

請求在給定的 remote_sockaddr 上建立連接。如果成功則返回 0,否則引發異常。

參數

  • remote_sockaddr - 包含在字符串或 Addrinfo 對象中的 struct sockaddr

例子:

# Pull down Google's web page
require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 80, 'www.google.com' )
socket.connect( sockaddr )
socket.write( "GET / HTTP/1.0\r\n\r\n" )
results = socket.read

基於 Unix 的異常

在基於 unix 的係統上,如果對 connect 的調用失敗,可能會引發以下係統異常:

  • Errno::EACCES - 前綴路徑的組件的搜索權限被拒絕或對 socket 的寫訪問被拒絕

  • Errno::EADDRINUSE - sockaddr 已在使用中

  • Errno::EADDRNOTAVAIL - 指定的sockaddr 在本地機器上不可用

  • Errno::EAFNOSUPPORT - 指定的sockaddr 不是指定socket 的地址族的有效地址

  • Errno::EALREADY - 指定套接字的連接已經在進行中

  • Errno::EBADF - socket 不是有效的文件說明符

  • Errno::ECONNREFUSED - 目標sockaddr 沒有監聽連接拒絕連接請求

  • Errno::ECONNRESET - 遠程主機重置連接請求

  • Errno::EFAULT - 無法訪問 sockaddr

  • Errno::EHOSTUNREACH - 無法到達目標主機(可能是因為主機已關閉或遠程路由器無法到達)

  • Errno::EINPROGRESS - 為socket 設置了O_NONBLOCK,無法立即建立連接;連接將異步建立

  • Errno::EINTR - 建立連接的嘗試因傳遞捕獲的信號而中斷;連接將異步建立

  • Errno::EISCONN - 指定的socket 已連接

  • Errno::EINVAL - 用於 sockaddr 的地址長度不是地址係列的有效長度,或者 sockaddr 中存在無效係列

  • Errno::ENAMETOOLONG - 解析的路徑名長度超過PATH_MAX

  • Errno::ENETDOWN - 用於到達目的地的本地接口已關閉

  • Errno::ENETUNREACH - 不存在到網絡的路由

  • Errno::ENOBUFS - 沒有可用的緩衝區空間

  • Errno::ENOSR - 可用的 STREAMS 資源不足,無法完成操作

  • Errno::ENOTSOCK - socket 參數不引用套接字

  • Errno::EOPNOTSUPP - 調用 socket 正在偵聽,無法連接

  • Errno::EPROTOTYPE - sockaddr 的類型與綁定到指定對等地址的套接字不同

  • Errno::ETIMEDOUT - 在建立連接之前嘗試連接超時。

在基於 unix 的係統上,如果調用 socket 的地址族是 AF_UNIX ,如果對 connect 的調用失敗,則可能會引發以下異常:

  • Errno::EIO - 讀取或寫入文件係統時發生 i/o 錯誤

  • Errno::ELOOP - 翻譯 sockaddr 中的路徑名時遇到太多符號鏈接

  • Errno::ENAMETOOLLONG - 路徑名的一個組成部分超過了 NAME_MAX 個字符,或者整個路徑名超過了 PATH_MAX 個字符

  • Errno::ENOENT - 路徑名的組件沒有命名現有文件或路徑名是空字符串

  • Errno::ENOTDIR - sockaddr 中路徑名的路徑前綴的組件不是目錄

Windows 異常

在 Windows 係統上,如果對 connect 的調用失敗,可能會引發以下係統異常:

  • Errno::ENETDOWN - 網絡已關閉

  • Errno::EADDRINUSE - 套接字的本地地址已被使用

  • Errno::EINTR - 套接字被取消

  • Errno::EINPROGRESS - 阻塞套接字正在進行或服務提供者仍在處理回調函數。或者 socket 上正在進行非阻塞連接調用。

  • Errno::EALREADY - 見 Errno::EINVAL

  • Errno::EADDRNOTAVAIL - 遠程地址不是有效地址,例如ADDR_ANY TODO check ADDRANY TO INADDR_ANY

  • Errno::EAFNOSUPPORT - 指定係列中的地址不能與此 socket 一起使用

  • Errno::ECONNREFUSED - 目標sockaddr 沒有監聽連接拒絕連接請求

  • Errno::EFAULT - 套接字的內部地址或地址長度參數太小或不是用戶空間地址的有效部分

  • Errno::EINVAL - socket 是一個監聽套接字

  • Errno::EISCONN - socket 已連接

  • Errno::ENETUNREACH - 此時無法從此主機訪問網絡

  • Errno::EHOSTUNREACH - 不存在到網絡的路由

  • Errno::ENOBUFS - 沒有可用的緩衝區空間

  • Errno::ENOTSOCK - socket 參數不引用套接字

  • Errno::ETIMEDOUT - 在建立連接之前嘗試連接超時。

  • Errno::EWOULDBLOCK - 套接字被標記為非阻塞,無法立即完成連接

  • Errno::EACCES - 嘗試將數據報套接字連接到廣播地址失敗

參看

  • 在基於 Unix 的係統上連接手冊頁

  • Microsoft 的 Winsock 函數參考中的連接函數

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Socket.connect。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。