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


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