短时间内太多WSASend会成为问题吗?

时间:2019-06-16 21:32:32

标签: sockets networking iocp overlapped-io

我正在用IOCP制作一个简单的mmorpg服务器。 我实现了一个简单的移动功能,因此我使用了虚拟客户端(也就是IOCP)进行了测试。 仅当很少有客户端连接时,一切正常。连接大约500〜1000个客户端后,一些虚拟客户端有时会读取奇怪的数据。我检查了服务器是否按预期发送了数据,但是在虚拟客户端读取数据时,它们读取的是随机数据。

我的猜测是,这可能与操作系统的recv缓冲区溢出有关,但是我现在只是在猜测……我不知道如何检查它们。

任何建议都会非常感激!

1 个答案:

答案 0 :(得分:0)

WSASend过多的问题通常不会表现为损坏的数据。这很可能是您代码中的错误。也许您的问题是由于您无法管理用于正确发送数据的缓冲区的生存期而导致的?在您完成WSASend呼叫之前,它需要保持稳定。如果您早于重用它,那么您将破坏正在发送的数据。

当您有许多未偿付的WSASend时,可能会出现这种情况的原因是,发送操作可能需要花费更长的时间才能完成,因此更有可能击中您的错误...

只要您的客户端能够尽快接收数据,您发出多少个WSASend都无关紧要。一旦您发送的速度超过接收速度,就会出现问题。我在this answer中解决了这些问题。