Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.03;
Скачать: CL | DM;

Вниз

Изменение размера пакета 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
3-4806
Valeris
2003-01-17 11:20
2003.02.03
подключение к SQL серверу в консольном приложении


1-4989
blackman
2003-01-23 09:43
2003.02.03
OemToChar не пашет в WinXP рус D6 ?


14-5154
Sabor
2003-01-17 20:36
2003.02.03
form


1-5019
BofA
2003-01-23 15:35
2003.02.03
Вопрос по TEdit.OnChange


1-4956
dvm
2003-01-26 16:09
2003.02.03
Аналог в Делфи операции из Си