加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:20:33 所属栏目:大数据 来源:网络整理
导读:考虑以下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;# ... 在正常情况下,一切都按预期工作,但当主机系统的
考虑以下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;
# ...

在正常情况下,一切都按预期工作,但当主机系统的互联网连接处于非活动状态时,“sock”变量为空且$!有消息“无效的参数”.

我不恰当地使用INET构造函数还是预期的行为?如果是后者,有没有办法区分“网络接口不活动”错误和构造函数方法的真正无效参数?

解决方法

您看到“无效参数”,因为构造函数尝试解析主机名,获取错误,并在$!中返回EINVAL.如果您在$host中使用IP地址,您会看到真正的错误,“网络无法访问”.

此外,IO :: Socket :: INET设置$@来限定$!中返回的错误,所以如果你打印$@以及$!,你会看到“Bad hostname’google.com’”,这可能是一个甚至比使用IP地址而不是主机名获得的“网络无法访问”更好的诊断.在这两种情况下,应该立即清楚发生了什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读