Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

select глючит почему-то [D7, WinXP]


Dmitry_177 ©   (2007-04-26 22:30:00) 

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

send

select
recv

send

select
recv

и т.д.


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

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

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


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


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


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


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

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

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


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

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


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

Вы можете подумать то что неправильно составлен диалог, т.е. в какой-то момент и сервер будет ждать ответа и клиент тоже.. насчет этого все правильно! т.к. если убрать все 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-е пока не выйдет время..

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо