- 论坛徽章:
- 0
|
use strict;
use IO::Socket;
use Fcntl qw(:flock);
our $SOCK;
$addr = '133.72.45.10;
$port = '8310';
$SOCK = IO::Socket::INET->new(PeerAddr => $addr,
PeerPort => $port,
Type => SOCK_STREAM,
Timeout=>10,
Proto => 'tcp'
) or die "socket create error:".$!."\n";
my $ret;
$ret=flock($SOCK, 2) or print "Cannot lock - $!\n"; #2为排他
print "the ret is ret"."\n";
Cannot lock - Invalid argument
the ret is:0
0表示锁文他失败。
换为普通本地文件是没有问题的。
奇怪了。难道flock 不支持socket?
父进程生成socket,然后fork N多子进程,子进程要通过socket访问远程服务器。
写为 $ret=flock($SOCK, 2) 不or的话,不报错,所以一直以为没问题。后来发现有竞态的情况发生。
如何解决?求助。
|
|