【发布时间】:2020-05-30 07:30:36
【问题描述】:
我有一个简单的模拟器,它从内核 nfnetlink_queue 子系统接收排队的数据包。传入数据包的处理可以通过使用recv() 函数的循环来完成:
(更多信息,请参阅here。示例代码在这里:http://www.netfilter.org/projects/libnetfilter_queue/doxygen/nfqnl__test_8c_source.html)
fd = nfq_fd(h);
while ((rv = recv(fd, buf, sizeof(buf), 0)) >= 0) {
printf("pkt received\n");
nfq_handle_packet(h, buf, rv);
}
recv() 函数返回什么?我面临一个奇怪的问题:当它正常工作时,recv() 返回1552,突然它得到120,在下一次迭代中,它得到-1,这意味着没有数据包。在我们不断发送数据包的情况下,-1,或者没有数据包可以读取是不正确的!有什么意见吗?
【问题讨论】:
标签: linux network-programming iptables netfilter