Perl IO :: Socket :: INET混淆了“无效参数”错误

|| 请考虑以下Perl脚本片段:
use IO::Socket;
# ...
my $sock = IO::Socket::INET->new(
    PeerAddr => $host, # e.g. \"google.com\"
    PeerPort => $port, # e.g. 80
    Proto => \'tcp\'
);
die(\"no socket: $!\") unless $sock;
# ...
在正常情况下,一切都会按预期工作,但是当主机系统的Internet连接处于非活动状态时,\“ sock \\”变量为空,并且
$!
消息为\“ Invalid arguments \”。 我是否不适当地使用了INET构造函数,或者这是预期的行为?如果是后者,是否有办法区分“网络接口无效”错误和构造函数方法的真正无效参数?     
已邀请:
您会看到\“ Invalid arguments \”,因为构造函数尝试解析主机名,获取错误并在
$!
中返回
EINVAL
。如果您要使用“ 4”中的IP地址,则会看到真正的错误“网络不可达”。 另外,
IO::Socket::INET
设置
$@
以限定
$!
中返回的错误,因此,如果同时打印
$@
$!
,则会看到\“ Bad hostname \'google.com \'\\',这可能比\更好。网络不可达\“,您将获得IP地址而不是主机名。在这两种情况下,都应立即清除发生的情况。     

要回复问题请先登录注册