У меня система мониторинга. Есть хост или нет его. Если хост есть нужно от него получить информацию (везде стоят мои клиенты и серверы на перл). Вот я и делаю connect(), и если програмка не запущена на сервере и/или порт закрыт connect() пытается доооолго перед тем как сдаться.
Вопрос: как установить таймаут для connect(), чтоб не пытался долго????
connect() в перле (слишком долго пытается приконнектится)
Модератор: Модераторы разделов
-
povert.org
- Сообщения: 43
connect() в перле
Slackware Linux 10.1 on Dell latitude c600 pIII-1Ghz (laptop) && Slackware Linux 10.0 on AMD 2000+ (table PC) -- more on povert.org Днепропетровск, Украина
+ webcam !!!!
+ webcam !!!!
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: connect() в перле
Можно попытаться установить неблокирующий режим для дескриптора перед вызовом connect.
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: connect() в перле
Эх, давненько я с сокетами напрямую не работал. Даже уже и не помню, что там к чему.
"В лоб" я бы решил проблему с помощью прерывания по времени.
"В лоб" я бы решил проблему с помощью прерывания по времени.
Код: Выделить всё
eval {
$SIG{ALRM} = sub { die "alarm\n" };
alarm 10;
# ... code
};
if ( $@ eq "alarm\n" ) {
print "время вышло!\n";
}ArchLinux / IceWM
-
povert.org
- Сообщения: 43
Re: connect() в перле
про alarm я сразу и подумал, но хотелось чего-то более корректного. А вот неблокирующий режим я не учел, это интересно... там fcntl помоему... Ну а насчет чего-то типа установки параметра сокету, я таймаут не нашел...
Спасибо за советы. Может еще какие идеи?
Спасибо за советы. Может еще какие идеи?
Slackware Linux 10.1 on Dell latitude c600 pIII-1Ghz (laptop) && Slackware Linux 10.0 on AMD 2000+ (table PC) -- more on povert.org Днепропетровск, Украина
+ webcam !!!!
+ webcam !!!!
-
Shura
- Сообщения: 1537
- Статус: Оказывается и без KDE есть жизнь
- ОС: FreeBSD 8.0-RC2
Re: connect() в перле
Глянь на setsockopt().
Я точно помню, что делал, но как чейчас не помню. Приду домой-посмотрю.
Я точно помню, что делал, но как чейчас не помню. Приду домой-посмотрю.
Rock'n'roll мертв © БГ
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: connect() в перле
Неблокирующий коннект делается так:
1. ставим nonblock на сокет
2. зовем connect
3. потом зовем select
4. getsockopt проверяем законнектились ли
точные флаги/аргументы не помню
1. ставим nonblock на сокет
2. зовем connect
3. потом зовем select
4. getsockopt проверяем законнектились ли
точные флаги/аргументы не помню
В каждом из нас спит гений... и с каждым днем все крепче...