查询与 SOCKET 在给定 LEVEL 关联的名为 OPTNAME 的选项。选项可能存在于多个协议级别,具体取决于套接字类型,但至少存在于最上层的套接字级别 SOL_SOCKET(在 Socket
模块中定义)。要查询其他级别的选项,应提供控制该选项的相应协议的协议号。例如,要指示选项由 TCP 协议解释,LEVEL 应设置为 TCP 的协议号,可以使用 getprotobyname
获取。
该函数返回一个表示所请求套接字选项的打包字符串,或者在出错时返回 undef
,错误原因将放置在 $!
中。打包字符串中包含的内容取决于 LEVEL 和 OPTNAME;有关详细信息,请参阅 getsockopt(2)。常见情况是选项是一个整数,在这种情况下,结果是一个打包的整数,可以使用 unpack
和 i
(或 I
)格式对其进行解码。
以下是一个测试套接字上是否启用了 Nagle 算法的示例
use Socket qw(:all);
defined(my $tcp = getprotobyname("tcp"))
or die "Could not determine the protocol number for tcp";
# my $tcp = IPPROTO_TCP; # Alternative
my $packed = getsockopt($socket, $tcp, TCP_NODELAY)
or die "getsockopt TCP_NODELAY: $!";
my $nodelay = unpack("I", $packed);
print "Nagle's algorithm is turned ",
$nodelay ? "off\n" : "on\n";
可移植性问题:"getsockopt" in perlport.