The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
" tcp socket send отправка сообщения целиком "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Сеть, сокеты)
Изначальное сообщение [ Отслеживать ]

" tcp socket send отправка сообщения целиком "  +/
Сообщение от deadka (ok) on 12-Июл-10, 14:38 
Приветствую!

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

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

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

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

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. " tcp socket send отправка сообщения целиком "  +/
Сообщение от Xaionaro (ok) on 27-Авг-10, 23:52 
>Нельзя, tcp это поток байт, а не пакетов.
>
>PS: Мир не ограничивается tcp и udp. Есть sctp напрмер ))

Можно работать и на более низком уровне :). Я например вполне удачно всырую формировал ICMP-пакеты. Не думаю, что в TCP это будет сложнее :)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. " tcp socket send отправка сообщения целиком "  +/
Сообщение от pavlinux email(ok) on 30-Авг-10, 01:48 
> чтобы как в 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);

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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