Может ли слишком много WSASend за короткое время стать проблемой?

Я делаю простой сервер mmorpg с IOCP. Я реализовал простую функцию движения, поэтому протестировал ее с фиктивными клиентами (также IOCP). Все работает нормально только когда подключено мало клиентов. После подключения 500–1000 клиентов некоторые фиктивные клиенты иногда считывают странные данные. Я проверил, что сервер отправляет данные, как я и ожидал, но когда дело доходит до их чтения фиктивными клиентами, они считывают случайные данные.

Я предполагаю, что это может быть связано с переполнением буфера recv операционной системы, но сейчас я только предполагаю... Я понятия не имею, как их проверить.

Любое предложение было бы очень признательно!


person Jeongmin Heo    schedule 16.06.2019    source источник
comment
100% это ваша ошибка. не операционная система   -  person RbMm    schedule 17.06.2019


Ответы (1)


Проблема со слишком большим количеством WSASends обычно не проявляется в виде поврежденных данных; это, скорее всего, ошибка в вашем коде. Возможно, ваша проблема вызвана тем, что вы не можете управлять временем жизни буфера, который используется для правильной отправки данных? Он должен оставаться стабильным, пока вы не получите завершение вызова WSASend. Если бы вы повторно использовали его раньше, вы бы испортили отправляемые данные.

Причина, по которой это может проявляться, когда у вас есть много WSASends, ожидающих выполнения для большого количества клиентов, заключается в том, что операции отправки могут занимать больше времени, и поэтому повышается вероятность того, что ваша ошибка будет обнаружена...

Неважно, сколько WSASend вы отправляете, если ваши клиенты могут получать данные так же быстро, как вы можете их отправлять. Как только вы отправляете быстрее, чем они могут получить, тогда будут проблемы. Я решаю эти проблемы в этом ответе.

person Len Holgate    schedule 17.06.2019