Текущий архив: 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