История изменений
Исправление gag, (текущая версия) :
А что за сокет? TCP, UDP, Unix Domain? Смотрю, выше люди предположили, что TCP, так? Тогда это давно известная проблема, когда хочется UDP, но чтобы надёжно как TCP. Существует подходящий протокол: SCTP, который как-то не очень распространён. (Или, может, широко используется, но в узких кругах. Но кто знает, может, завтра, вдруг, станет популярным.)
Но недавно наконец-то сделали именно то, чего все ждали: отдельные сообщения поверх TCP, а именно Kernel Connection Multiplexor:
The motivation for this is based on the observation that although TCP is byte stream transport protocol with no concept of message boundaries, a common use case is to implement a framed application layer protocol running over TCP.
А вообще-то выше уже намекнули, что существует простое, быстрое и портабельное решение: Type-length-value подход для протокола. Длина указывается, но на второй позиции после типа сообщения (заранее известной длины, например, 1-4 байта).
Исходная версия gag, :
А что за сокет? TCP, UDP, Unix Domain? Смотрю, выше люди предположили, что TCP, так? Тогда это давно известная проблема, когда хочется UDP, но чтобы надёжно как TCP. Существует подходящий протокол: SCTP, который как-то не очень распространён. (Или, может, широко используется, но в узких кругах. Но кто знает, может, завтра, вдруг, станет популярным.)
Но недавно наконец-то сделали именно то, чего все ждали: отдельные сообщения поверх TCP, а именно Kernel Connection Multiplexor:
The motivation for this is based on the observation that although TCP is byte stream transport protocol with no concept of message boundaries, a common use case is to implement a framed application layer protocol running over TCP.
А вообще-то выше уже правильно подметили, что очень существует простое, быстрое и портабельное решение: Type-length-value подход для протокола.