我使用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。 如果关闭我怎么能转过来?
答案 0 :(得分:2)
那是因为您从示例中复制的行包含代码中未定义的变量$tcp
。将getsockopt
行更改为
my $packed = getsockopt($socket, IPPROTO_TCP, TCP_NODELAY);
它会起作用。
您应该在代码中使用use strict;
,它会捕获此错误。