我有一个由以下内容组成的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
并且在一个异常空闲套接字上。
鉴于我没有在对等体上看到任何表面上的错误,为什么这个脚本仍然存在,即使它似乎已写入套接字?解释器可能会陷入困境或遇到一些约束或限制(脚本在一个非常强大的盒子上运行,所以它不受系统限制)?
感谢。
答案 0 :(得分:2)
不确定这是否有帮助,但您可以尝试使用IO::Socket::INET
本身关闭套接字:$sock->close()
或$sock->shutdown(2)
。另请尝试在最后添加exit(0)
。