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


Ruby Socket.bind用法及代码示例


本文简要介绍ruby语言中 Socket.bind 的用法。

用法

bind(local_sockaddr) → 0

绑定到给定的本地地址。

参数

  • local_sockaddr - 包含在字符串或 Addrinfo 对象中的 struct sockaddr

示例

require 'socket'

# use Addrinfo
socket = Socket.new(:INET, :STREAM, 0)
socket.bind(Addrinfo.tcp("127.0.0.1", 2222))
p socket.local_address #=> #<Addrinfo: 127.0.0.1:2222 TCP>

# use struct sockaddr
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
socket.bind( sockaddr )

基于 Unix 的异常

在基于 unix 的系统上,如果对 bind 的调用失败,可能会引发以下系统异常:

  • Errno::EACCES - 指定的sockaddr 受保护,当前用户无权绑定到它

  • Errno::EADDRINUSE - 指定的sockaddr 已在使用中

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

  • Errno::EAFNOSUPPORT - 指定的 sockaddr 不是调用 socket 的系列的有效地址

  • Errno::EBADF - 指定的 sockaddr 不是有效的文件说明符

  • Errno::EFAULT - 无法访问 sockaddr 参数

  • Errno::EINVAL - socket 已绑定到地址,并且协议不支持绑定到新的 sockaddrsocket 已关闭。

  • Errno::EINVAL - 地址长度不是地址族的有效长度

  • Errno::ENAMETOOLONG - 解析的路径名长度超过PATH_MAX

  • Errno::ENOBUFS - 没有可用的缓冲区空间

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

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

  • Errno::EOPNOTSUPP - socket 的套接字类型不支持绑定到地址

在基于 unix 的系统上,如果调用 socket 的地址族是 Socket::AF_UNIX ,如果对 bind 的调用失败,则可能会引发以下异常:

  • Errno::EACCES - 前缀路径的组件的搜索权限被拒绝或对 socket 的写访问被拒绝

  • Errno::EDESTADDRREQ - sockaddr 参数是一个空指针

  • Errno::EISDIR - 与 Errno::EDESTADDRREQ 相同

  • Errno::EIO - 发生 i/o 错误

  • Errno::ELOOP - 翻译 sockaddr 中的路径名时遇到太多符号链接

  • Errno::ENAMETOOLLONG - 路径名的一个组成部分超过了 NAME_MAX 个字符,或者整个路径名超过了 PATH_MAX 个字符

  • Errno::ENOENT - 路径名的组件没有命名现有文件或路径名是空字符串

  • Errno::ENOTDIR - sockaddr 中路径名的路径前缀的组件不是目录

  • Errno::EROFS - 名称将驻留在只读文件系统上

Windows 异常

在 Windows 系统上,如果对 bind 的调用失败,可能会引发以下系统异常:

  • Errno::ENETDOWN - 网络已关闭

  • Errno::EACCES - 尝试将数据报套接字连接到广播地址失败

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

  • Errno::EADDRNOTAVAIL - 指定的地址不是此计算机的有效地址

  • Errno::EFAULT - 套接字的内部地址或地址长度参数太小或不是用户空间寻址的有效部分

  • Errno::EINVAL - socket 已经绑定到一个地址

  • Errno::ENOBUFS - 没有可用的缓冲区空间

  • Errno::ENOTSOCK - socket 参数不引用套接字

参看

  • 在基于 Unix 的系统上绑定手册页

  • Microsoft 的 Winsock 函数参考中的绑定函数

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Socket.bind。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。