Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
14-5221
Supreme
2003-01-15 20:24
2003.02.03
Возможна ли в России хорошая жизнь?


3-4754
Артур
2003-01-15 20:36
2003.02.03
Как узнать запущена ли моя программа на другом комьютере по сети,


1-4889
Stager
2003-01-23 20:51
2003.02.03
Куда подевалось событие?


9-4697
Vitas2
2002-08-08 10:03
2003.02.03
OpenGL


4-5331
Pan
2002-12-17 09:19
2003.02.03
Как получить GUID?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский