Прежде всего, TCP является протоколом потока байтов, а не протоколом на основе пакетов. Тот факт, что вы отправили 1024-байтовый фрагмент, не означает, что он будет получен таким образом. Если вы заполняете канал достаточно быстро, чтобы получить нулевое условие окна (то есть, что больше нет места ни в буфере приема, ни в буфере отправки), то очень вероятно, что код получателя в какой-то момент сможет читать далеко больше, чем размер вашего "пакета".
Если вы специально не запрашивали неблокирующие сокеты, то и send
, и recv
будут блокироваться с нулевым состоянием окна / окна, а не возвращать ошибку.
Если вы хотите вставить код на стороне получателя, мы можем взглянуть, но из того, что вы описали, очень вероятно, что ваше 9344-е чтение на самом деле получает больше байтов, чем размер вашего пакета. Вы проверяете значение, возвращаемое из recv
?