设置sockopt perl不起作用

时间:2014-11-30 10:36:25

标签: perl sockets

我使用perldoc网站的以下代码将TCP nodelay设置为1(nagle algo disable)

#!/usr/bin/perl

use IO::Socket;
use IO::Socket::INET;
use Socket;
use Socket qw(IPPROTO_TCP TCP_NODELAY);
use IO::Socket qw(:DEFAULT :crlf);
use Socket qw(:all);

$/ = CRLF;

my $socket = IO::Socket::INET -> new (Proto => 'tcp', PeerAddr => 'www.example.com', PeerPort => 'http');
setsockopt($socket,IPPROTO_TCP,TCP_NODELAY,0);
my $packed = getsockopt($socket, $tcp, TCP_NODELAY);
my $nodelay = unpack("I",$packed);
print "Nagle's algorithm turned ",$nodelay ? "off\n":"on\n";

但在我的情况下,每次输出都是“打开Nagle算法”,将TCP nodelay值设置为1或0。 如果关闭我怎么能转过来?

1 个答案:

答案 0 :(得分:2)

那是因为您从示例中复制的行包含代码中未定义的变量$tcp。将getsockopt行更改为

my $packed = getsockopt($socket, IPPROTO_TCP, TCP_NODELAY);

它会起作用。

您应该在代码中使用use strict;,它会捕获此错误。