The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
tcp socket send отправка сообщения целиком , !*! deadka, 12-Июл-10, 14:38  [смотреть все]
Приветствую!

Люди, подскажите кто знает плиз, есть ли возможность у tcp-сокетов (linux, не винда) в случае tcp-соединения отсылать данные "цельно"?

В случае датаграмного udp у меня таких проблем и вовсе не было - что recvrom что sendto всегда принимали/отправляли цельно.

А можно ли сделать такое в случае tcp-соединения? Как я понял в случае recv можно задать флаг MSG_WAITALL, а вот как быть в случае отправки? Есть ли возможность задания каких-либо флагов/опций сокетов, чтобы как в udp можно было "цельно" отправлять пакеты, размер мне заранее известен.

Заранее спасибо!

  • tcp socket send отправка сообщения целиком , !*! svn, 11:53 , 13-Июл-10 (1)
    Нельзя, tcp это поток байт, а не пакетов.

    PS: Мир не ограничивается tcp и udp. Есть sctp напрмер ))

  • tcp socket send отправка сообщения целиком , !*! Xaionaro, 23:51 , 27-Авг-10 (2)
    Не понял что вы хотите. Но если разбираться в общих чертах, то, AFAIK, OS имеет обычно привычку наоборот "склеивать" пакеты, а не фрагментировать, дабы избежать ненужный служебный трафик. Или вы говорите про frame-ы? К сожелению фреймы ограничиваются mtu и mru, поэтому если данные разбились на несколько фреймов, то с этим лучше не бороться.

    А вообще, пакеты можно составлять вручную (aka сырые сокеты). Только для этого требуются обычно очень привилегилированный доступ (root).

    P.S.: в "man 2 send" (в linux) есть флаг "MSG_MORE". Я никогда его не использовал, но на первый взгляд очень похож на то что надо. Советую почитать.

  • tcp socket send отправка сообщения целиком , !*! pavlinux, 01:48 , 30-Авг-10 (4)
    > чтобы как в udp можно было "цельно" отправлять пакеты, размер мне заранее известен.

    int res;
    int buffsz = SIZE_OF_PKT;

    setsockopt(s, SOL_SOCKET, SO_SNDBUF, &buffsz, sizeof(buffsz));
    write(s, buff, SIZE_OF_PKT);

    .........

    setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffsz, sizeof(buffsz));
    read(s, buff, SIZE_OF_PKT);




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру