У вас есть альтернативный способ решения проблемы с буфером?
что вообще есть проблема переполнения буфера на клиенте?
это когда клиент пытается считать данных больше, чем ему отправил сервер.
клиенту приходит пакет, в котором содержится различное множество сообщений, которые клиент читает один за другим.
если клиенту по каким-то причинам не удается прочитать одно из таких сообщений, то он отбрасывает весь пакет.
почему клиент пытается прочитать больше чем доступно?
потому что сервер изначально отправил такие данные.
почему так получилось?
я не буду углубляться во все возможные моменты переполнения буфера, просто опишу почему это происходит в случае с войсом:
в движке игры есть буфер с фиксированным размером, в который помещаются сообщения перед записью их в пакет для отправки клиенту.
когда движок пытается записать в этот буфер данных больше, чем у него осталось свободного места, то происходит обрезание пакета.
то есть вот он пишет что следующее такое-то сообщение и не завершает запись из-за переполнения. пакет отправляется с неполным сообщением в конце.
в результате чего клиент ожидает сообщение, а натыкается на неожиданный конец пакета. далее происходит отключение с сообщением о переполнении.
искать решение на мой взгляд стоит в функции
CNetChan::SendNetMsg
достаточно просто не писать в буфер сообщение, если для него не хватает места.
полный стек вызовов:
bool CNetChan::SendNetMsg
void SV_BroadcastVoiceData
bool CGameClient::ProcessVoiceData