Сетевой демон на C. Для соединений использую протокол tcp, проблема в том что он является потоковым. Т.е. у меня нет гарантий, что один пакет посланный клиентом сервер не примет как несколько пакетов, и наоборот - несколько пакетов от клиента сервер может принять при чтении с сокета как один.
Подскажите как с этим бороться. Есть мысль использовать сигнатуры начала и конца пакетов, но уж больно накладно получается, поиск строк в пакетах. Может есть способ лучше?PS: использовать udp не предлагать - tcp нужен для контроля состояния соединения и контроля доставки пакетов.
Организовать прикладной протокол обмена так,
чтобы границы пакетов были видны. Дабы не
искать каких-то там сигнатур, можно перед
посылкой каждого пакета отправлять его размер.
Только не забыть размерную цифирь в сетевой
byte order перевести.
>Сетевой демон на C. Для соединений использую протокол tcp, проблема в том
>что он является потоковым. Т.е. у меня нет гарантий, что один
>пакет посланный клиентом сервер не примет как несколько пакетов, и наоборот
>- несколько пакетов от клиента сервер может принять при чтении с
>сокета как один.
>Подскажите как с этим бороться. Есть мысль использовать сигнатуры начала и конца
>пакетов, но уж больно накладно получается, поиск строк в пакетах. Может
>есть способ лучше?
>
>PS: использовать udp не предлагать - tcp нужен для контроля состояния соединения
>и контроля доставки пакетов.(про то что поток можно резать уже сказали)
можно попробовать и какой-нить другой протокол..
например SCTP (http://www.sctp.org/ )
или обойтись udp, сделав свой механизм квитирования и переповторов.
Ах да - udp просили не предлагать..зря
;-)