LINUX.ORG.RU

что бы это значило??? (TCP/socket)


0

0

Подскажите плиз, кто знает в чем дело - у меня никаких соображений по этому поводу нет :( Ситуация такая: сервер(свой)/клиент(MPlayer + live.com - rtsp). По RFC все сообщения не должны быть разделены, и передаваться за один пакет. Ловлю трафик tcpdump'ом.

Первое сообщение от клиента - разделено на два tcp пакета, у меня через recv принимается за один раз. Смотрю траффик - два пакета, первый - нормальный, длина ~142 байта, второй - продолжение, длина ~200. Т.е. все сообщение спокойно умещается в MTU, и навряд ли ядро(2.4.26) разбило его на два пакета. Но если пересылать через send, то перешлется один пакет...

Как такое может быть? Как можно послать одно сообщение, чтобы оно было разбито на две части, но принималось как одно сообщение???

★★★

В tcp нет сообщений, есть непрерывный поток данных. А ситуация могла возникнуть, если в первый раз было записано 142 байта в сокет, а второй раз 200 байт. если писать одной операцией 342 байта, то такого не будет. Впрочем я видел и не такое. Еще смотри в сторону флага TCP_NODELAY.

ansky ★★★★★
()

> Как такое может быть?

не очень понимаю, что вас удивляет.

одна сторона может сделать сотню send'ов по 1 байту,
и они вполне могут вызывать посылку ста пакетов, особенно
с TCP_NODELAY. а получить их можно за один recv().

вот если бы это был UDP.

idle ★★★★★
()
Ответ на: комментарий от idle

> TCP_NODELAY

Спасибо за ответ, с этим параметром на практике не сталкивался :)

Из другого трейда - про softirq можно подробнее?

Spectr ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.