Perl Inet Socket 连接说明

Perl Inet Socket connect clarification

我想了解 Inet Socket connect 在 perl 中是如何工作的。我有下面的代码片段。

socket(my $socket, Socket::PF_INET, Socket::SOCK_STREAM, $protocol) ||
    Carp::confess "CONNECT_ERROR: Unable to create socket. $!\n";
local $SIG{ALRM} = sub { Carp::confess "Connection Timeout"; };

 eval {
            alarm(3);
            $return_val = connect( $socket, $full_address );
            alarm(0);
        }; 

以下是 3 个场景:

1) 如果要为服务器定义完整地址和开放端口,则定义 return_val 的值。

2) 如果应用程序试图与同一服务器上未打开的端口通信,则 return_val 未定义。然而在这种情况下,警报并没有触发。

3) 然而,有时在开放端口上尝试连接服务器时,会触发警报。这意味着连接语句尚未完全执行。

我对第二和第三个场景中显示的行为感到困惑。 connect 如何区分无响应和慢响应?理想情况下,我希望服务器在客户端尝试在未打开的端口上进行通信时不响应,这意味着连接不应完成执行,这会触发警报。连接是否有内部超时?我搜索了它的默认值,但没有找到。

我是不是漏掉了什么?有人可以帮忙解释一下吗?

谢谢

一切都很简单。尝试快速连接到没有人在特定端口上侦听的可访问服务器 returns 失败 - 另一方快速通知调用者可以说没有人在家。

但是,如果您尝试连接到不可访问的服务器或端口已打开,但此端口上的侦听器正忙于其他事情,连接调用将阻塞 并等到尝试到达服务器超时或另一端的侦听器接听电话。在这种情况下,您的警报会触发,并且您的值未定义 - 因为连接没有在您分配的 3 秒内完成。

我希望,现在已经清楚了。