Наиболее вероятное объяснение состоит в том, что сервер фактически отправляет тело, но вы не читаете все это. Большинство сетевых систем не обязательно возвращают весь ответ в одном вызове функции, потому что считают полезным, чтобы данные, которые доступны немедленно, возвращались немедленно, даже если ожидается больше.
Системный вызов Unix recv
возвращает ноль после завершения соединения. Вы должны продолжать звонить, пока не получите ноль или ошибку.