Форум: "Сети";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизИзменение размера пакета TCP Найти похожие ветки
← →
neodiX (2002-12-07 15:50) [0]Как я знаю у TCP протокола размер пакета может достигать 64Кб, но на практике, делфифский ClientSocket посылает данные пакетами, размер которых не привышает 8Кб. Может кто знает как изменить размер TCP пакета? Я пробывал сoздавать свой сокет с socket, a потом с setsockopt(handle, SOL_SOCKET, SO_SNDBUF, @tru,sizeof(tru)), но ничего не получилось, размер не изменяется :(. Как правильно использовать setsockopt?
← →
Danilcha (2002-12-07 17:27) [1]А вообще разве можно самлму менять размер TCP/IP пакетов? Его вроде сама система выбирает в зависимости от занятости сети, стабильности, и т.д.
← →
neodiX (2002-12-07 17:46) [2]Ну пользуя UDP, там есть Property BufferSize... Вот думаю и тут должно быть...
← →
Sha (2002-12-07 20:07) [3]Value: integer;
Value:=64*1024;
if setsockopt(FSock, SOL_SOCKET, SO_RCVBUF, @Value, Sizeof(Value))<>0 then;
if setsockopt(FSock, SOL_SOCKET, SO_SNDBUF, @Value, Sizeof(Value))<>0 then;
← →
Polevi (2002-12-08 13:24) [4]зачем тебе это нужно
← →
Digitman (2002-12-09 08:22) [5]
> neodiX
Вот именно - зачем ?
К тому же setsockopt(SO_SNDBUF/SO_RCVBUF) управляет не размером "пакета", а размерами лок.буфера передачи/приема гнезда
← →
Wonder (2002-12-09 13:50) [6]>neodiX
А с чего ты вообще взял, что размер сегмента TCP = 8кб
← →
Polevi (2002-12-09 14:16) [7]он путает с размером буфера
← →
neodiX (2002-12-09 20:04) [8]>Wonder
Просто взял кинул clietsocket and serversocket на форму, попробывал передать буффер данных, а в serversocket"е в евенте onRead написал типа этого: memo1.lines.add(inttostr(length(socket.receivetext))); Смотрю получает по 8 Кб, а иногда и менее, отсюда и взял что это клиент посылает пакеты по 8 Кб.
Но сейчас все в норме - разобрался, конечно же если на серваке не укажешь желаемый размер получаемого буфера, то и будеш получать размерами по дефолту, в моем случае после того как на сервере поменял размер SO_RCVBUF все стало работать.
> Digitman
> К тому же setsockopt(SO_SNDBUF/SO_RCVBUF) управляет не размером
> "пакета", а размерами лок.буфера передачи/приема гнезда
а чо это за локальный буфер, как он работает? Т.е. по принципу накопил - послал?
← →
Sha (2002-12-09 20:45) [9]Те самые буфера, размеры которых ты менял :)
От тебя они скрыты, но именно из них к тебе попадают
данные и в них твои данные помещаются перед отправкой.
Система заводит один буфер на передачу и один на прием
для каждого сокета. Похоже, передача данных происходит
при первой возможности
← →
Sha (2002-12-09 20:53) [10]Кстати, после изменения размера размера буфера установленный
размер может оказаться меньше, чем ты заказывал. Так что проверяй, что получилось. У меня максимальный 64к-9.
← →
Sha (2002-12-09 20:56) [11]И самое главное - менять размеры буферов парами (приемный и передающий). Ну, ты сам это уже понял.
← →
Digitman (2002-12-10 11:23) [12]>neodiX
Буферы приема/передачи работают по FIFO.
Самый опт. вариант - принимать/передавать за одно событие OnRead/OnWrite данные размером в пол-очереди (4k по-умолчанию)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c