Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

select глючит почему-то   Найти похожие ветки 

 
Dmitry_177   (2007-04-26 22:30) [0]

Непойму что такое, у меня почему-то select глючит.. у меня с сервером идет передача данных.. так вот в клиентской части перед каждым recv находится select, т.е. примерно код выглядит следующим образом:

send

select
recv

send

select
recv

и т.д.


так вот у меня почему-то то работает то не работает.. вот например раз пробегает вышеуказанный код, все отлично, второй и далее может пройти а может на select-е остановиться, пока не выйдет время ожидания.. вот непойму никак в чем дело.. все проверил все вроде правильно... но почему он так через раз работает не понятно...

сервер и клиентская части у меня на одном компьютере.. и ip в клиенте я прописываю свой же..я уже не знаю может это из за этого? хотя без select-а все отлично работает, просто я решил с помощью select-a предотвратить зависание программы на recv, если вдруг по каким-то причинам недойдет какойнибудь пакет..

помогите пожалуйста, может кто-то сталкивался с этой проблемой?


 
Dmitry_177   (2007-04-27 00:46) [1]

Вы можете подумать то что неправильно составлен диалог, т.е. в какой-то момент и сервер будет ждать ответа и клиент тоже.. насчет этого все правильно! т.к. если убрать все select-ы то все работает..

Я уж думал то что по каким-то причинам из массива, а он во всех select-ах один и тотже используется, удаляется сокет и может из за этого что-то не работает, я перед каждым select-ом написал это:

if not FD_ISSET(KLSock, FDSet) then
 begin
   FD_ZERO(FDSet);
   FD_SET(KLSock, FDSet);
   TimeOut.tv_sec := 60;
   TimeOut.tv_usec := 0;
 end;

всерано не работает..  зависает на select-е пока не выйдет время..

и странно то что когда как, то по второму разу сработает, то нет, когда как.. бывает и с первого раза не сработает.. никак не пойму с чем это связано..


 
Сергей М. ©   (2007-04-27 08:32) [2]

Для начала отключи алгоритм Нагеля на передающей стороне (см. SetSockOpt и опцию TCP_NODELAY), потом будем рассуждать про твою беду детально


 
Dmitry_177   (2007-04-28 22:31) [3]

А что плохого в алгоритме Нагеля? для чего он вообще тогда нужен если его надо отключать и чем он мешает?

Передающих у меня сторон обе =) и клиент что-то передает серверу и сервер клиенту..


 
Сергей М. ©   (2007-05-02 08:32) [4]


> что плохого в алгоритме Нагеля?


"Плохого" в нем ничего нет.
Но он буферизует передаваемые в течение времени N данные с целью уменьшения нагрузки на сеть и увеличения производительности за счет минимизации служебной части TCP-траффика.
Если время N сравнимо с таймаутом, которое ты задаешь в FDSet, то описанная тобой картина вполне объяснима.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
2-1197810242
Riply
2007-12-16 16:04
2008.01.13
Свободные Windows Error - ы :)


15-1196765928
boriskb
2007-12-04 13:58
2008.01.13
Молодым везде у нас дорога


15-1196510297
Мирон
2007-12-01 14:58
2008.01.13
Форматы файлов MS Office


3-1188911245
pasha_golub
2007-09-04 17:07
2008.01.13
Master-Detail связка: чтобы мастер-запись из комбобокса


15-1197218888
Grain
2007-12-09 19:48
2008.01.13
Выборы грядут!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский