Timeout в fsockopen или как проверить коннект с сервером

RulCom

Новичок
Timeout в fsockopen или как проверить коннект с сервером

Доброго всем времени суток.

Может, кто даст совет, по следующей проблемке. Задача состоит в следующем: необходимо проверять на работоспособность сервера в сети. Т.е. включен ли некоторый сервер (например ftp) на известном компьютере. Для проверки этой работоспособности, в данной постановке задачи, достаточно просто открыть соединение по 21 порту. Так вот как это можно организовать?
Сразу отмечу, что не подходят пинг и ftp_connect. Первый, из-за брандмауэров и не только, вообще не является каким-либо показателем, т.к. не пройдет на 50% включенных серверов. Второй слишком медленный, время соединения иногда достигает 20 сек, это не приемлемо.
Приемлемое время на проверку одного хоста не более 1 сек!

Я пробовал применить fsockopen. Этот вариант подходит полностью, кроме одного, у fsockopen не работает timeout Т.е. делаю примерно так: fsockopen($name,21,$errno, $errstr, 1). Если сервак включен, то все ОК. Но если выключен, то функция ждет ответа 9 сек, а не 1, как указано в timeout'е.
Попробовал заюзать CURL, но блин, не хватило ума разобраться, как просто открыть соединение по известному порту, без дальнейшей передачи каких либо данных. Т.е. ftp_connect через CURL я получил, но как я уже говорил, это не подходит.

Подскажите, как все-таки врубить timeout в fsockopen или заюзать CURL? Либо, может, есть другие способы решения поставленной задачи?
 

RulCom

Новичок
Автор оригинала: tony2001
[m]stream_set_blocking[/m]
[m]stream_set_timeout[/m]
stream_set_timeout указывает таймаут для операций, которые используются после fsockopen. Мне же нужно указать таймаут самого fsockopen.
А stream_set_blocking вообще ни о чем. Мне же не надо предавать/получать данные по организованному соединению.
Повторюсь, мне нужно просто открыть соединение, и проверить, открылось или нет, и все, просто сделать это надо быстро, максимум за 1 сек.
 

IdFox

Новичок
Блин прошло 10 лет почти
Автор напиши мне если прочтешь этот пост как ты решил
Та же самая проблемма (
Полез к разрабам на сайт и нашел одну вещь в доках на эту функцию
Depending on the environment, the Unix domain or the optional connect timeout may not be available.
Т.е я так понял в зависимости от операционки данный параметр может как бы и не работать...
Гениально конечно )
В общем ты как решил тогда свою проблемму, не вспомнишь за 10лет?
Буду очень признателен )))
 

IdFox

Новичок
Хм. Долгие поиски в гугле и яндексе еще нашли, что мы не одни такие )
-----
http://omsk777.ru/funct.argument.fsockopen.html
mikebNOSPAM at xamo dot com
30-Sep-2004 03:17
Hey, why were my comments regarding fsockopen connection timeouts taken out? I'm sure they would have been very useful to other users.
fsockopen (on FreeBSD and probably OpenBSD) will ignore the connection timeout parameter, and hang for several minutes if it can't connect for a variety of reasons (no DNS resolve, host down, extreme firewall setups). Use curl instead until a solution is found (i spent days on this issue)
------
Короче говоря суть ясна. Юзаем курл если нужно HTTP протокол как временное решение
Хотя я всегда думал что курл это не более как надстройка над сокетами...
 
Сверху