C++ 在调试器中时Winsock2数据丢失

C++ 在调试器中时Winsock2数据丢失,c++,winsock,winsock2,overlapped-io,C++,Winsock,Winsock2,Overlapped Io,我将Winsock2与重叠i/O结合使用。这意味着我将使用WSAOOverlapped结构调用WSARecv,稍后我将使用WSAWaitForMultipleEvents等待数据 我观察到一个奇怪的现象:当我使用调试器停止应用程序时,我似乎丢失了发送到应用程序的任何数据。我以为这些数据会堆积在操作系统的某个地方,然后在下次调用WSARecv时被传递 我的假设是错误的吗?UDP还是TCP 我假设每个调用使用一个单独的重叠结构,每个结构使用一个单独的事件 请记住,将重叠的I/O与事件一起使用并不是特

我将Winsock2与重叠i/O结合使用。这意味着我将使用WSAOOverlapped结构调用WSARecv,稍后我将使用WSAWaitForMultipleEvents等待数据

我观察到一个奇怪的现象:当我使用调试器停止应用程序时,我似乎丢失了发送到应用程序的任何数据。我以为这些数据会堆积在操作系统的某个地方,然后在下次调用WSARecv时被传递

我的假设是错误的吗?

UDP还是TCP

我假设每个调用使用一个单独的重叠结构,每个结构使用一个单独的事件

请记住,将重叠的I/O与事件一起使用并不是特别可伸缩的,只需将套接字与I/O完成端口相关联并完全跳过整个事件就更容易了。

我假设每个调用使用一个单独的重叠结构,每个结构使用一个单独的事件


请记住,将重叠的I/O与事件一起使用并不是特别可伸缩的,简单地将套接字与I/O完成端口关联并完全跳过整个事件要容易得多。

在代码中的其他地方一定会有一些错误,您描述的情况不应该产生该错误,在操作系统中的某个地方,如果不将数据传送到您的程序,数据就会堆积。但操作系统本身也有一些限制,我不知道如果它溢出会发生什么。我进一步调查了一下,发现数据堆积在与调试程序中的WSAOoverlapped相关联的缓冲区中。我只是似乎没有收到任何关于此数据的事件。当接收到下一个数据块时,缓冲区被简单地覆盖,我可能会看到新数据的事件。真的很奇怪。在你的代码中的其他地方肯定有一些错误,你描述的情况不应该产生这个错误,而且在操作系统的某个地方,如果没有传递到你的程序,数据会堆积起来。但操作系统本身也有一些限制,我不知道如果它溢出会发生什么。我进一步调查了一下,发现数据堆积在与调试程序中的WSAOoverlapped相关联的缓冲区中。我只是似乎没有收到任何关于此数据的事件。当接收到下一个数据块时,缓冲区被简单地覆盖,我可能会看到新数据的事件。真奇怪,这是TCP的。在重叠结构被使用后,我将其归零,并且我将resetevent作为已使用的事件。奇怪的是,它在没有被调试器暂停时工作正常。那么,是否也应该出现任何错误来重新识别事件/重叠结构的滥用?是的,但是调试器可能会导致任何竞争条件更频繁地出现。。。我们能看一些代码吗?它是TCP的。在重叠结构被使用后,我将其归零,并且我将resetevent作为已使用的事件。奇怪的是,它在没有被调试器暂停时工作正常。那么,是否也应该出现任何错误来重新识别事件/重叠结构的滥用?是的,但是调试器可能会导致任何竞争条件更频繁地出现。。。我们能看一些代码吗?