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


Ruby BasicSocket.setsockopt用法及代码示例


本文简要介绍ruby语言中 BasicSocket.setsockopt 的用法。

用法

setsockopt(level, optname, optval)
setsockopt(socketoption)

设置一个套接字选项。这些是特定于协议和系统的,有关详细信息,请参阅您的本地系统文档。

参数

  • level 是一个整数,通常是 SOL_ 常量之一,例如 Socket::SOL_SOCKET,或协议级别。名称的字符串或符号,可能没有前缀,也被接受。

  • optname是一个整数,通常是SO_常量之一,如Socket::SO_REUSEADDR。名称的字符串或符号,可能没有前缀,也被接受。

  • optval 是选项的值,它作为指向特定字节数的指针传递给底层setsockopt()。如何完成取决于类型:

    • Integer:value被赋值给一个int,并传递一个指向int的指针,长度为sizeof(int)。

    • true 或 false:1 或 0(分别)分配给 int,并且 int 与 Integer 一样传递。请注意,必须通过 false ,而不是 nil

    • String:将字符串的数据和长度传递给套接字。

  • socketoption Socket::Option 的一个实例

例子

一些套接字选项是带有布尔值的整数,在这种情况下 setsockopt 可以这样调用:

sock.setsockopt(:SOCKET, :REUSEADDR, true)
sock.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
sock.setsockopt(Socket::Option.bool(:INET, :SOCKET, :REUSEADDR, true))

一些套接字选项是带有数值的整数,在这种情况下 setsockopt 可以这样调用:

sock.setsockopt(:IP, :TTL, 255)
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, 255)
sock.setsockopt(Socket::Option.int(:INET, :IP, :TTL, 255))

选项值可以是结构。传递它们可能很复杂,因为它涉及检查系统标头以确定正确的定义。一个例子是 ip_mreq ,它可以在您的系统头文件中定义为:

struct ip_mreq {
  struct  in_addr imr_multiaddr;
  struct  in_addr imr_interface;
};

在这种情况下, setsockopt 可以这样调用:

optval = IPAddr.new("224.0.0.251").hton +
         IPAddr.new(Socket::INADDR_ANY, Socket::AF_INET).hton
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, optval)

相关用法


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