В последнее время, прочитав Socket Programming HOWTO, следующий раздел выскочил на меня:
Но если вы планируете повторно использовать ваш сокет для дальнейших передач, вам нужно понять, что в сокете нет "EOT" (End of Transfer). Повторяю: если сокет send или recv возвращается после обработки 0 байтов, соединение было нарушено. Если соединение не было сломано, вы можете ждать на recv навсегда, потому что сокет не скажет вам, что больше ничего не читать (пока). Теперь, если вы немного об этом подумаете, вы поймете фундаментальную правду сокетов: сообщения должны быть либо фиксированной длиной (yuck), либо быть с разделителями (пожимать плечами)), или указать, сколько времени они (намного лучше), или завершить, отключив соединение. Выбор целиком принадлежит вам (но некоторые пути более опасны, чем другие).
В этом разделе показаны 4 возможности для того, как сокет "протокол" может быть записан для передачи сообщений. Мой вопрос: какой предпочтительный метод использовать для реальных приложений?
Как правило, лучше всего включать размер сообщения с каждым сообщением (предположительно в заголовке), поскольку статья более или менее утверждает? Существуют ли ситуации, когда предпочтительным будет другой метод?