«TCP Window Full» происходит, когда ваше окно приема уменьшается до нуля, то есть - буферы приема заполняются. Он будет заполняться до тех пор, пока вы не получите данные из сокета.
Обычно это происходит, когда отправитель отправляет данные быстрее, чем получатель обрабатывает их, или, по крайней мере, получает их из сокета. Когда это происходит, отправитель должен прекратить отправку большего количества данных, пока получатель не сможет снова получить больше. Это происходит после получения данных из сокета, и отправителю сообщают об этом двумя способами:
Получатель отправляет «Обновление окна TCP», которое указывает, сколько места в окне приема снова доступно. Это не тот кадр, который подтвержден отправителем, он может потеряться. Из-за этого есть и второй путь ниже.
Отправитель постоянно опрашивает получателя, отправляя пакеты TCP Keep-Alive (пакеты без данных). Эти пакеты должны быть подтверждены получателем, и поскольку каждый кадр TCP содержит размер окна удаленного конца в своем заголовке, таким образом отправитель может получить информацию о том, сможете ли вы получить снова.
«TCP Window Full» не является ошибкой - Wireshark окрашивает его в черный цвет только для того, чтобы указать, что если у вас есть проблемы с передачей, это может быть то, что вы, возможно, захотите посмотреть. Другим примером такой раскраски являются ретрансляции TCP.
Подводя итог - вы должны получить данные из сокета. Если вы уже делаете это, но в этом случае нечего читать (например, select
указывает на отсутствие данных для чтения), то это может указывать на некоторые другие проблемы в вашем конкретном случае.