简单的Perl套接字脚本挂起

时间:2013-05-10 13:54:31

标签: performance perl sockets tcp

我有一个由以下内容组成的Perl脚本:

 #!/usr/bin/perl
 # Script name: socket.pl

 # Build socket:
 use IO::Socket;
 my $sock = new IO::Socket::INET (
                                  PeerAddr => '74.74.74.74',
                                  PeerPort => '1543',
                                  Proto => 'tcp',
                                 )
 or die "Could not create socket: $@\n"; 

 # Make a pipe-delimited string out of the four arguments:
 $data = "$ARGV[0]$ARGV[1]|$ARGV[2]|$ARGV[3]|$ARGV[4]";

 # Write to socket and immediately close:
 print $sock "$data";
 close($sock);

当脚本被多次调用时,问题开始出现。在脚本每分钟被调用60次的情况下,如果我pgrep socket.pl,我会看到100或200个实例已经“运行”了3到4分钟。他们正在编写的服务器似乎立即接收$data并且在一个异常空闲套接字上。

鉴于我没有在对等体上看到任何表面上的错误,为什么这个脚本仍然存在,即使它似乎已写入套接字?解释器可能会陷入困境或遇到一些约束或限制(脚本在一个非常强大的盒子上运行,所以它不受系统限制)?

感谢。

1 个答案:

答案 0 :(得分:2)

不确定这是否有帮助,但您可以尝试使用IO::Socket::INET本身关闭套接字:$sock->close()$sock->shutdown(2)。另请尝试在最后添加exit(0)

相关问题