Главная страница
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.48 MB
Время: 0.014 c
15-1196971356
shaman
2007-12-06 23:02
2008.01.13
тормоза под Win2003


15-1196839941
data
2007-12-05 10:32
2008.01.13
зона покрытия сотовых


15-1197116679
FEEEEEE
2007-12-08 15:24
2008.01.13
Ищу название фильма


6-1178264607
DelphiN!
2007-05-04 11:43
2008.01.13
Ошибки "Software caused connection abort" и "Connection refused"


15-1197103154
Igor Zorkov
2007-12-08 11:39
2008.01.13
Хостинге