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

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

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

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