Perl IO::Socket::INET 混淆 "Invalid argument"错误

标签 perl sockets invalid-argument 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;
# ...

在正常情况下一切正常,但是当主机系统的互联网连接处于非事件状态时,“sock”变量为空并且$!有消息“无效参数”。

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

最佳答案

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

另外,IO::Socket::INET$@限定 $! 中返回的错误, 所以如果你打印 $@以及 $! ,您将看到“错误的主机名 'google.com'”,这可能比使用 IP 地址而不是主机名得到的“网络无法访问”更好。在这两种情况下,都应该立即清楚发生了什么。

关于Perl IO::Socket::INET 混淆 "Invalid argument"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101244/

相关文章:

perl - 将 GPG 密码发送到 Perl 脚本时转义括号

Perl Net::LDAPS SSL 版本协商

perl - Perl如何计算数组列数据?

mysql - 为什么我在 mysql 更新时收到 'invalid use of group function' 错误?

c++ - 使用 gstreamer 时出现 Eclipse 无效参数错误

windows - 如何将我的 perl 脚本打包为 32 位可执行文件?

c++ - 在 Windows 环境中使用 C/C++ 联网

sockets - 我可以选择使用哪个以太网端口进行 UDP 通信吗?

c# - 每个套接字地址仅使用一种

php - 警告 : Invalid argument supplied for foreach() in C:\wamp\www\social\includes\class-query. php 第 145 行