(这是以前asked问题的更新转贴,上贴有旧帐户,但我已丢失凭据)
我正在编写一个客户端 - 服务器程序,其中客户端是C ++ / winapi,服务器是C#/ .net。
socket是一个AF_INET / SOCK_STREAM,我在客户端使用Readfile()和WriteFile()作为套接字IO。
客户端有一个从服务器读取的循环(并且可能阻塞调用线程[表示t1],这对我来说没问题)。它还有另一个线程[表示t2],它等待具有超时的Event对象。
如果达到超时(并且尚未单独调用Event),t2线程将在同一个套接字上写(exacly on byte)。
我遇到的问题是,似乎写入不会返回,直到t1上的读取返回(在一些合法的scnerions中它永远不会发生),就像套接字不是全双工一样。
我已经检查过它,但是没有其他与线程相关的复制品。我实际上从不同的机器运行客户端,并使用wireshark来嗅流量。达到超时后,线路上什么都没有(无论我等多久),直到我从服务器端写了一些数据(所以t1上的read()返回) - 就在那之后,写()客户终于被传送了。
答案 0 :(得分:0)
正如我在前面提到的问题中所解释的那样,套接字 是全双工的。一个线程中的读取不会阻止另一个线程中的写入,反之亦然。