本文简要介绍ruby语言中  Socket.connect  的用法。
用法
connect(remote_sockaddr) → 0请求在给定的 remote_sockaddr 上建立连接。如果成功则返回 0,否则引发异常。
参数
- 
remote_sockaddr- 包含在字符串或Addrinfo对象中的structsockaddr
例子:
# 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 Socket.connect_nonblock用法及代码示例
- 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
