0

我有一个 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 次的情况下,如果我pgrepfor socket.pl,我会看到 100 或 200 个实例已经“运行”了 3 或 4 分钟。他们正在写入的服务器似乎 $data立即在一个无异常的套接字上接收。

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

谢谢。

4

1 回答 1

2

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

于 2013-05-10T14:08:55.293 回答