recv()是否已经在等待数据检测从另一端关闭套接字?

时间:2017-09-29 18:55:44

标签: c sockets

我正在将文件的内容传输到客户端,并在完成传输后关闭TX套接字(shutdown(hdl, SHUT_WR))。客户端依赖于检测到有序关闭套接字以退出循环以接收数据。

我注意到检测发生(recv()有时只返回0)而有时它只是阻塞。我怀疑shutdown()和最终recv()之间的竞争条件,即在调用recv()之前套接字关闭时我可以检测到有序关闭,但是如果recv()已经阻塞数据和此时套接字是shutdown(),然后客户端无法检测到它。

我的诊断是对的吗? 无论上述问题的答案如何 - 如何在不诉诸OOB手段的情况下更好地处理传输结束的检测?

P.S。 :如果重要 - 我在Windows 8.1机器上使用CYGWIN。

0 个答案:

没有答案