【发布时间】:2012-08-10 04:48:05
【问题描述】:
我在 perl 中的守护进程中创建了一个这样的套接字
IO::Socket::INET->new(LocalPort => $port,
Proto => 'udp',Blocking => '0') or die "socket: $@";
在 Linux 机器上
在 recv 调用期间,套接字的行为与预期的非阻塞套接字一样
$sock->recv($message, 128);.
但是,我一直观察到,当 eth0 上的 VIF 在守护程序运行并接收数据时重新配置时,recv 调用开始阻塞。
这是一个非常令人困惑的问题。我做了$sock->recv($message, 128, MSG_DONTWAIT);,recv 调用变为非阻塞。
我用谷歌搜索过,但看不到使用 UDP 非阻塞套接字的建议方法。
【问题讨论】:
-
我已经从标题中删除了“not”,因为我认为这就是你想要的(原来的方式没有意义)
-
你能尝试在
strace下运行一个测试用例来捕捉它吗?您看到它与接口更改相关的事实意味着这可能是一个内核错误。