【发布时间】:2011-06-10 14:22:51
【问题描述】:
我将 Winsock2 与重叠 I/O 结合使用。这意味着我用 WSAOVERLAPPED 结构调用 WSARecv,然后我用 WSAWaitForMultipleEvents 等待数据。
我做了一个奇怪的观察,当我用调试器停止它时,我似乎丢失了发送到我的应用程序的任何数据。我认为这些数据会堆积在操作系统的某个地方,然后在下次调用 WSARecv 时传递。
我的假设是错误的吗?
【问题讨论】:
-
代码中的其他地方一定有一些错误,你描述的情况不应该产生那个错误,并且如果没有传递给你的程序,操作系统中的某个地方会堆积数据。但是操作系统本身也有一些限制,不知道如果溢出会怎样。
-
我进行了进一步调查,发现数据堆积在调试器中与 WSAOVERLAPPED 关联的缓冲区中。我似乎没有收到任何有关此数据的事件。当接收到下一个数据块时,缓冲区会被简单地覆盖,我可能会看到新数据的事件。真的很奇怪。
标签: c++ winsock winsock2 overlapped-io