gpt4 book ai didi

perl - Perl非阻塞套接字

转载 作者:行者123 更新时间:2023-12-03 12:06:28 25 4
gpt4 key购买 nike

我想使用无阻塞套接字连接,但是找不到用于理解主要思想的任何示例。
我需要客户端连接到服务器时不会阻止程序执行的客户端。
现在,我有以下代码:

use IO::Socket;
use IO::Select;
use strict;
$|=1;
my $host="10.0.0.12";
my $SELECT = new IO::Select;
print "Connecting...";
my $sock=new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 3128,
Proto => 'tcp',
Blocking => 0);
if(!$sock)
{
print "Could not create socket: $!n";
}
#print "ok\n";
$SELECT->add($sock);
my $buf;
while (1){
if($sock and $sock->connected())
{
print "ok\n";
}
while (my @ready=$SELECT->can_read(0.5))
{
foreach my $child (@ready)
{
if(!sysread($child, $buf, 256))
{
$SELECT->remove($child);
next;
}

}
}
sleep 1;
}

当套接字连接$ sock-> connected()返回true时,我可以做一些事情。但是如何检查套接字超时?如果无法连接并在超时之前关闭,则无法检查!我该怎么做?

添加:
哦,我明白了!
一段代码
if(!sysread($child, $buf, 256))
{
$SELECT->remove($child);
next;
}

超时到期时关闭套接字!

最佳答案

在套接字的上下文中,“阻塞”与套接字上的读取/写入操作有关,而不是与连接有关。您对设置套接字连接的超时感兴趣,通常可以使用

Timeout => $max_seconds_to_wait
IO::Socket构造函数中的参数。

关于perl - Perl非阻塞套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7123092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com