Главная страница
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.017 c
2-1197456069
VovIk
2007-12-12 13:41
2008.01.13
Как выполнять одинаковый код для всех окон проекта?


1-1192517479
pokan
2007-10-16 10:51
2008.01.13
Правая ось на TSeries


9-1164915039
sat
2006-11-30 22:30
2008.01.13
пятнашки


2-1197536434
Free_Breeze
2007-12-13 12:00
2008.01.13
Получить хинт из другого приложения


15-1197263105
class_
2007-12-10 08:05
2008.01.13
При просмотре небольшого ролика в Интернет