| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Установить timeout на соединение сокета (WinSock) |
| Автор: Ibragim 29.1.2008, 15:29 | ||
| Всем день добрый. Столкнулся с таким вопросом: Используется неблокирующий сокет из юнита WinSock, необходимо поставить таймаут на соединение. То есть:
собственно задача: на строчке Connect происходит пауза, достаточно большая (точно не експериментировал), если сервер по адресу Addr не отвечает. А хотелось бы в любом случае ждать, положим, 2 секунды, и если не ответил, переходить по ветке then. |
| Автор: Qu1nt 29.1.2008, 17:37 |
| Можно его сначала пропинговать, например. |
| Автор: MaXL 29.1.2008, 18:45 |
| Пинг тоже занимает некоторое время, поэтому это скорее всего не подойдёт. Да и иногда пинг запрещён, а тут ситуация такая(как я понял) сервер включен, доступен, но не отвечает на соединение. Ibragim, прямо таки много время тянет ? |
| Автор: MetalFan 29.1.2008, 21:52 |
| в инди это реализовано с пом.доп. потока, который закрывает сокет по истечению таймаута |
| Автор: Ibragim 29.1.2008, 22:03 | ||
да немало, но счас вроде сделал так:
и вроде как стало значительно беспроблемней. То есть все равно не 2 секунды, но рвет достаточно быстро... Похоже что эти SO_RCVTIMEO, SO_SNDTIMEO имеют влияние и на запросы-"обмен приветствиями TCP" В принципе оставим вопрос "полузакрытым" ( Спасибо за ответы. PS Естественно, создать еще поток - тоже вариант, но там могут быть серьезные подводные камни с утечкой памяти, а программа - это чекер IP (легальный! PPS Тогда уже не поток, а просто неблокирующий сокет и подождать в цикле... |
| Автор: Ibragim 29.1.2008, 22:28 | ||
скорость, %ля, меряем между подсетями весь интернет начальство замеряет, потом порежет и продасть PS Сорри за оффтоп, не удержался PPS Даже звонили куда-то в представительство, систему на серваке пропатчили чтобы оптимизированно тысячи соединений открывать |
| Автор: mrbrooks 29.1.2008, 22:33 |
| Можно использовать: WaitForSingleObject - для одного объекта или WaitForMultipleObjects - собственно для множества. |
| Автор: Ibragim 29.1.2008, 22:36 |
| 2mrbrooks: эм... и как же? Названные тобой функции как раз "замораживают" вызывающий их поток, то есть делают как раз противоположное тому, что мне надо. У меня и так поток, в котором идет соединение, "замораживается" на большее время (до того, как ОС решит что хватит ждать соединения), чем мне надо... |