TCP套接字上的POLLIN事件,但没有要读取的数据

TCP套接字上的POLLIN事件,但没有要读取的数据,c,sockets,C,Sockets,我正在使用一个框架,我给它一个套接字,如果有数据要读取(或者超时),它将调用我的回调 然而,它一直在尽可能快地调用我的cpu,尽管没有数据可以从套接字读取 下面是我在strace上看到的循环: [pid 16586] poll([{fd=16, events=POLLIN}, {fd=17, events=POLLIN}], 2, 1000) = 2 ([{fd=16, revents=POLLIN}, {fd=17, revents=POLLIN}]) [pid 16586] recvfrom

我正在使用一个框架,我给它一个套接字,如果有数据要读取(或者超时),它将调用我的回调

然而,它一直在尽可能快地调用我的cpu,尽管没有数据可以从套接字读取

下面是我在strace上看到的循环:

[pid 16586] poll([{fd=16, events=POLLIN}, {fd=17, events=POLLIN}], 2, 1000) = 2 ([{fd=16, revents=POLLIN}, {fd=17, revents=POLLIN}])
[pid 16586] recvfrom(16, "", 1024, 0, NULL, NULL) = 0
recvfrom()是否应该返回一些内容,或者轮询是否应该停止提高偶数


或者我是否需要执行其他操作来清除事件?

如评论中所述,由于我连接的设备关闭了套接字(在wireshark中被视为来自设备的FIN/ACK),因此我认为这是一种EOF情况


由于EOF也会触发POLLIN事件,这就是事件持续触发的原因。

如评论中所述,由于我连接的设备关闭了套接字(在wireshark中被视为来自设备的FIN/ACK),这被视为我端的EOF情况


由于EOF也会触发POLLIN事件,这就是事件持续触发的原因。

由于EOF(远程关闭的套接字)而没有留下任何可读取的内容也会让
poll()
等返回。我在wireshark中看到来自设备的FIN/ACK,这会是远程套接字关闭吗?是的,这是对等调用
close()
在它的套接字端,或者可能是
shutdown(fd,shutw)
。由于EOF(远程关闭的套接字)没有留下任何要读取的内容,也让
poll()
等返回。我看到wireshark中有一个FIN/ACK从设备发出,这是远程套接字关闭吗?是的,这是对等方在其套接字端调用
close()
,或者可能
关闭(fd,SHUT\U WR)