Должно быть так, что когда send () отправляет данные быстрее, чем recv () может прочитать, он будет блокировать send () , пока recv () сервера не очистит канал, а не recv ().
Таким образом, если ваш сервер блокирует recv после того, как клиент работает слишком быстро, то, вероятно, происходит следующее:
Client sending data too fast, but pipe not full yet. Server receiving data.
Pipe fills up. Server->recv getting data. Client->send blocking.
Server->recv gets all the data while Client->send is still blocking.
Pipe empties out. Server->recv blocks until pipe is full again.
Client->send is still blocking, waiting for a signal to go check if the pipe is ready.
Однако вы сказали, что в вашей входной очереди еще есть данные. Вы не сказали, где реализовали упомянутый вами msg_peek, но при условии, что ваш инструментарий реализован правильно, возможно ли, что ваш буфер szBufferTmp заполнен, не очищается после его использования, и у вас есть логика, предотвращающая перезапись когда он заполнится?
Требуется больше данных, чтобы определить, так ли это. Нам нужно увидеть код вашего сервера и клиента, и не мешало бы включить код для вашего вызова через сокет, вызова getaddrinfo и вызовов bind / listen / accept / connect, просто чтобы убедиться, .