本文简要介绍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 BasicSocket.send用法及代码示例
- Ruby BasicSocket.sendmsg用法及代码示例
- Ruby BasicSocket.shutdown用法及代码示例
- Ruby BasicSocket.remote_address用法及代码示例
- Ruby BasicSocket.recv用法及代码示例
- Ruby BasicSocket.do_not_reverse_lookup用法及代码示例
- Ruby BasicSocket.do_not_reverse_lookup =用法及代码示例
- Ruby BasicSocket.connect_address用法及代码示例
- Ruby BasicSocket.recv_nonblock用法及代码示例
- Ruby BasicSocket.recvmsg用法及代码示例
- Ruby BasicSocket.getsockopt用法及代码示例
- Ruby BasicSocket.getpeereid用法及代码示例
- Ruby BasicSocket.local_address用法及代码示例
- Ruby BasicSocket.close_read用法及代码示例
- Ruby BasicSocket.getpeername用法及代码示例
- Ruby BasicSocket.getsockname用法及代码示例
- Ruby BasicSocket.close_write用法及代码示例
- Ruby BasicSocket.for_fd用法及代码示例
- Ruby BasicSpecification.require_paths用法及代码示例
- Ruby BasicObject.equal?用法及代码示例
- Ruby BasicObject.instance_eval用法及代码示例
- Ruby BasicObject.obj ==用法及代码示例
- Ruby BasicObject.method_missing用法及代码示例
- Ruby BasicObject.singleton_method_undefined用法及代码示例
- Ruby BasicObject.send用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 BasicSocket.setsockopt。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。