相同脚本在linux和windows下的不同遭遇

相同脚本在linux和windows下的不同遭遇

相同脚本在linux和windows下的不同遭遇
很简单的一个脚本,测试负荷.往一个地址发送数据,然后接收那个地址返回的数据..
在linux下面运行正常,但在windows下面却运行不正常,在发送了几个数据之后会堵在send那里.
最后我把recv和send放到同一个线程中才工作正常...
唉最怕这种脚本在不同平台下工作不一致的问题了.以前java线程+Socket也碰到过不同平台结果不一致的情况..头痛的要命.
#!/usr/bin/perl
use IO::Socket;
use IO::Select;
use threads;
use threads::shared;

$targetaddr=$ARGV[0];
$targetaddr="192.168.0.22:55555" if $targetaddr eq "";
share $targetaddr;

for ($i=0;$i<1;$i++){
threads->create("sendingThread");
}
while(1){
sleep(1);
}

sub sendingThread{
my $sock=IO::Socket::INET->new($targetaddr);
$sock || die "can not connect to $targetaddr\n";
print "a new thread conneted to $targetaddr\n";
threads->create("recvThread",$sock);

srand(time());
while(1){
undef $msg;
$sendlen=100+4+16+4;

$msg=pack("SS",$sendlen,0);
$msg.=pack("ISSII",0,0,$sendlen-4,0,0).('a' x ($sendlen-16));
$sock->send($msg) || die "send error \n";

}
}

sub recvThread{
my $sock=shift;

while(1){
$sock->recv($buf,10000);
last if $buf eq "";
}
print "one recv thread closed\n";
}
我通常都是用wirte或syswr.
我通常都是用wirte或syswrite来发送数据,从来没遇到过这种问题。