Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение размера пакета 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 пакетов? Его вроде сама система выбирает в зависимости от занятости сети, стабильности, и т.д.


Наверх

Титульная страница Поиск, карта сайта Написать письмо