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

Вниз

Timeout в сокетах   Найти похожие ветки 

 
Vilux   (2003-12-28 05:47) [0]

Написал программу, которая в несколько потоков запускает сокеты. При окончании работы программы некоторые сокеты зависают. Т.е. бывают ситуации, когда я через сокет что-нибудь отправляю, и ничего не получаю в ответ (процесс отправки длится бесконечно), т.е. программа вообще дальше не выполняется, т.к. от сокета ничего не приходит, даже ошибки... и программа висит на одном месте. С чем это может быть связано? Вот и возникает вопрос, как через определенное время закрывать сокет? Еще раз повторюсь, зависает именно на функции send, т.е. даже тот код, что находится после нее - не выполняется.


 
Polevi ©   (2003-12-28 10:30) [1]

см ф-ию select


 
Polevi ©   (2003-12-28 10:33) [2]

var
FDSet: TFDSet;
TimeVal: PTimeVal;
begin
FD_ZERO(FDSet);
FD_SET(socketHandle, FDSet);
New(TimeVal);
TimeVal.tv_sec := ...;
TimeVal.tv_usec := ...;
select(0, @FDSet, nil, nil, TimeVal);


 
Vilux   (2003-12-28 19:35) [3]

С отсылкой разобрался... а вот прием...
Насчет кода Polevi
Это не совсем то, дополнительно время уходит на проверку статуса сокета...нужно просто, чтобы я послал команду recv и если прошло время таймаута, то получил бы код ошибки...
sender(st+#13+#10);
x:=recv(sock2,Buf[1],k,0);
Если я неправильный запрос пошлю, допустим в конце забуду послать код ентера или подобное, то программа зависает на приеме. Т.е. я в дебагере дохожу до строчки x:=recv... и все... дальше ни шагу... висит...
Подскажите, может функция setsockopt поможет?


 
Digitman ©   (2003-12-29 08:29) [4]


> может функция setsockopt поможет?


а, может, и с бубном попрыгать не помешает).. гадать будешь, пока все ф-ции не перепробуешь ?


> то программа зависает на приеме


ты вчитался в описание ф-ции recv() для блокирующего режима гнезда ? все понял там ? или не все ?
чем вообще обоснован выбор блок.режима ?


 
Vilux   (2003-12-30 14:50) [5]

Без описания, когда книжек нету, и весь инет перерыт на предмет данной проблемы, можно и с бубном попрыгать. Просто трудно без док пытаться разобраться. Тогда я еще не знал,что есть блокирующие и неблокирующие режимы. Там, где я читал про использование сокетов об этом и слова сказано не было. Теперь нарыл доки наконец-то, разбираюсь... всем спасибо, если не разберусь, еще обращусь за помощью :)



Страницы: 1 вся ветка

Текущий архив: 2004.03.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
3-12249
Andrey V.
2004-02-08 10:29
2004.03.05
Работа с большим числом


6-12466
zig
2003-12-29 10:35
2004.03.05
Особеннсть метода Socket.SendText


1-12319
111
2004-02-21 19:02
2004.03.05
*.txt ; *.rtf


1-12320
VID
2004-02-22 20:04
2004.03.05
Срочно! С помощью чего можно запретить изм-е системного времени


4-12577
unnamed777
2003-12-27 05:29
2004.03.05
Прерывание сообщения