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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.006 c
15-1197193611
Kerk
2007-12-09 12:46
2008.01.13
Посмотри вокруг (Розыч, блин, не трожь, выходной же :-))


15-1197035508
@!!ex
2007-12-07 16:51
2008.01.13
Потестите прогу.


15-1194860207
TIF
2007-11-12 12:36
2008.01.13
Vista глюканулась. В чём проблема?


3-1189077558
Farel
2007-09-06 15:19
2008.01.13
Remote locate base


2-1197405115
San1
2007-12-11 23:31
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский