下面的代码已经工作了十多年,并且仍然在少数运行各种 linux 版本的机器(在私有(private) LAN 上)上运行,直到昨天我还安装了它。昨天,我在一台新安装的 CentOS 7 机器上试了一下,虽然我没有收到任何错误,但什么也没有收到。我也检查了upd发送机器,它肯定是发送到这台新机器的本地IP地址。 CentOS 7 中的网络协议(protocol)调用有什么东西会阻止接收 UDP 数据包吗?在 LAN 上设置新机器时,我确实注意到一些不同之处:ifconfig 不存在(我安装了它),eth0 被称为 enp9,所以我将其更改为 eth0 并且/usr/sbin/setup 实用程序没有看到我的nic 以便让我配置它。我——我相信——能够克服所有这些障碍,并且机器正常执行所有网络功能 ping、ssh、ypbind 等,但是 $sock->recv 的神秘失聪仍然存在。有谁知道我该如何解决这个问题?
use Socket;
use IO::Socket;
my ($sock, $oldmsg, $newmsg, $MAXLEN); #porto def.
$MAXLEN = 1024;
my $PORTNO = 5151;
my $sock = IO::Socket::INET->new(LocalPort => $PORTNO, Proto => 'udp')
or die "socket: $@";
$oldmsg = "This is the starting message.";
while ($sock->recv($newmsg, $MAXLEN)) {
# do some stuff with the data received.
}
最佳答案
确保没有运行阻止流量的防火墙。如果有,请更改其配置以允许您的特定数据包通过。
关于linux - perl IO::Socket 在新的 Centos 7 机器上是聋的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060303/