【发布时间】:2020-07-26 14:58:49
【问题描述】:
我正在使用一个框架,我给它一个套接字,如果有数据要读取(或者如果超时),它将调用我的回调。
尽管没有数据可以从套接字读取,但它一直在以我的 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() 不应该返回一些东西还是投票停止提高偶数?
或者我需要做其他事情来清理事件吗?
【问题讨论】:
-
由于 EOF(远程关闭套接字),没有什么可阅读的也让
poll()等人返回。 -
我在wireshark中看到一个来自设备的FIN/ACK,那是远程套接字关闭了吗?
-
是的,这就是在套接字末端调用
close()的对等方,或者可能是shutdown(fd, SHUT_WR)。