2011-06-10 102 views
1

我正在使用Winsock2和重叠的I/O。这意味着我使用WSAOVERLAPPED结构调用WSARecv,稍后使用WSAWaitForMultipleEvents等待数据。在调试器中Winsock2数据丢失

我做出了奇怪的观察,我似乎失去这是送我的应用程序,而我与调试器停止所有数据。我认为这些数据会堆积在操作系统的某个地方,然后在下次致电WSARecv时发布。

是我的假设假的?

+0

必须有一定的误差一些别的地方在你的代码,您所描述的情况应该不会产生错误,并且在数据堆积,如果不交付给你的程序的操作系统的某个地方。但操作系统本身有一些限制,我不知道如果溢出会发生什么。 – Ali1S232 2011-06-10 20:21:42

+0

我进一步调查了一下,发现在调试器中与WSAOVERLAPPED相关的缓冲区中存在数据堆积。我似乎没有收到任何此类数据的事件。当接收到下一个数据块时,缓冲区会被简单覆盖,我可能会看到新数据的事件。真奇怪。其对于TCP而言是 – MrZomg 2011-06-10 23:26:42

回答

1

UDP或TCP?

我假定您使用每次通话单独的OVERLAPPED结构,每个结构的单独的事件。

记住,它不是特别可扩展的使用与事件重叠的I/O,它更容易简单地把插座与I/O完成端口相关联,并完全跳过了整个事件的事情。

+0

。我已经使用ZeroMemory重叠结构,并且我还使用了WASResetEvent事件。奇怪的是,它没有被调试器暂停时工作正常。关于滥用事件/重叠结构的错误不应该存在吗? – MrZomg 2011-06-12 12:11:45

+0

是的,但调试器可能会导致更频繁出现任何竞态条件...我们可以看到一些代码吗? – 2011-06-12 16:23:31