LINUX.ORG.RU

Размер передаваемых данных по TCP?


0

0

Какой максимальный размер данных может быть передан за один вызов функции send()? От чего это зависит? А как можно узнать на принимающей стороне сколько данных было послано, что-бы можно было зарезервировать буффер нужного размера?

максимальный размер блока записанного в сокет это размер буфера

getsockopt(... SO_SNDBUF ...)

максимальный размер полезной нагрузки переданой в 1 TCP сегменте это MSS соединения

getsockopt(... TCP_MAXSEG ...)

сколько даных было послано узнать нельзя надо либо применять UDP либо помечять трафик

буфер резервировать не надо можно просто его увеличить если ожидаеться большой трафик. getsockopt(... SO_RCVBUF ...)

x86 ★★
()

на передаче вначале посылаеш длину всего сообшения (например длиной int),а потом само сообщение. send(sock,&nb,sizeof(int),0); send(sock,buff,nb,0);

на приеме ждеш сообшение длиной int, а потом само сообщение recv(sock,&nb,sizeof(int),MSG_WAITALL); buff=malloc(sizeof(char)*nb); recv(sock,buff,nb,MSG_WAITALL);

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