perl中调用recv函数阻塞,设置超时

来源:互联网 发布:如何进入网络班级 编辑:程序博客网 时间:2024/05/14 16:47

1
2
3
4
5
6
7
eval {
    local $SIG{ALRM} = sub die "alarm time out" };
    alarm $TIMEOUT;
    $sock->recv($msg$MAXLEN)      or die "recv: $!";
    alarm 0;
    1;  # return value from eval on normalcy
} or die "recv from $server_host timed out after $TIMEOUT seconds.\n";

#定义ALRM发生信号时的操作,这里发信给客户端并断开链接,子进程退出
$SIG{ALRM} = sub {
print "recv timeout\n";
##syswrite($session,"timeout");
my $bytes=send($session,"timeout",0); 
&log($bytes);
close($session);
exit();
};


alarm( 30 ); #同上,一般放在会超时的操作代码
my $bs=recv($session,$buf,2048,0); 
&log($bs);
alarm( 0 );

原创粉丝点击