Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
14-12486
Empleado
2004-02-13 17:44
2004.03.05
Пятница-с...


7-12567
Arsenij
2003-12-17 16:26
2004.03.05
Обмен данными через COM порт


14-12498
Rogdar
2004-02-13 11:44
2004.03.05
И здесь достанем.(из БК с вопросом к Мерлину)


3-12255
Санек
2004-02-09 13:10
2004.03.05
Доступные MS SQL сервера в сети


3-12228
Pako
2004-02-06 17:52
2004.03.05
SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский