![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение размера пакета TCP [D5, D6, D7, NT4, Win2k, WinXP]
neodiX © (2002-12-07 15:50:00)Как я знаю у TCP протокола размер пакета может достигать 64Кб, но на практике, делфифский ClientSocket посылает данные пакетами, размер которых не привышает 8Кб. Может кто знает как изменить размер TCP пакета? Я пробывал сoздавать свой сокет с socket, a потом с setsockopt(handle, SOL_SOCKET, SO_SNDBUF, @tru,sizeof(tru)), но ничего не получилось, размер не изменяется :(. Как правильно использовать setsockopt?
Digitman (2002-12-10 11:23:00) [1]>neodiX
Буферы приема/передачи работают по FIFO.
Самый опт. вариант - принимать/передавать за одно событие OnRead/OnWrite данные размером в пол-очереди (4k по-умолчанию)
Sha (2002-12-09 20:56:00) [2]И самое главное - менять размеры буферов парами (приемный и передающий). Ну, ты сам это уже понял.
Sha (2002-12-09 20:53:00) [3]Кстати, после изменения размера размера буфера установленный
размер может оказаться меньше, чем ты заказывал. Так что проверяй, что получилось. У меня максимальный 64к-9.
Sha (2002-12-09 20:45:00) [4]Те самые буфера, размеры которых ты менял :)
От тебя они скрыты, но именно из них к тебе попадают
данные и в них твои данные помещаются перед отправкой.
Система заводит один буфер на передачу и один на прием
для каждого сокета. Похоже, передача данных происходит
при первой возможности
neodiX (2002-12-09 20:04:00) [5]>Wonder
Просто взял кинул clietsocket and serversocket на форму, попробывал передать буффер данных, а в serversocket"е в евенте onRead написал типа этого: memo1.lines.add(inttostr(length(socket.receivetext))); Смотрю получает по 8 Кб, а иногда и менее, отсюда и взял что это клиент посылает пакеты по 8 Кб.
Но сейчас все в норме - разобрался, конечно же если на серваке не укажешь желаемый размер получаемого буфера, то и будеш получать размерами по дефолту, в моем случае после того как на сервере поменял размер SO_RCVBUF все стало работать.
> Digitman
> К тому же setsockopt(SO_SNDBUF/SO_RCVBUF) управляет не размером
> "пакета", а размерами лок.буфера передачи/приема гнезда
а чо это за локальный буфер, как он работает? Т.е. по принципу накопил - послал?
Polevi (2002-12-09 14:16:00) [6]он путает с размером буфера
Wonder (2002-12-09 13:50:00) [7]>neodiX
А с чего ты вообще взял, что размер сегмента TCP = 8кб
Digitman (2002-12-09 08:22:00) [8]
> neodiX
Вот именно - зачем ?
К тому же setsockopt(SO_SNDBUF/SO_RCVBUF) управляет не размером "пакета", а размерами лок.буфера передачи/приема гнезда
Polevi (2002-12-08 13:24:00) [9]зачем тебе это нужно
Sha (2002-12-07 20:07:00) [10]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;
neodiX (2002-12-07 17:46:00) [11]Ну пользуя UDP, там есть Property BufferSize... Вот думаю и тут должно быть...
Danilcha (2002-12-07 17:27:00) [12]А вообще разве можно самлму менять размер TCP/IP пакетов? Его вроде сама система выбирает в зависимости от занятости сети, стабильности, и т.д.