2013-02-28 3 views
1

Я пытаюсь проверить обслуживание на порте 9998. Для этого я использую функцию fsockopen().Проверка службы fsockopen()

Как это:

$host = "1.1.1.1"; 
$port = "9998"; 
$checkconn = fsockopen($host, $port, $errno, $errstr, 1); 
if($checkconn >= 1){ 
echo 'ok'; 
} else { 
echo "$errstr"; 
} 

Он всегда возвращает «Время ожидания подключения истекло - 110», но порт открыт и есть служба работает там.

Если я сменил порт (например, 80), он будет успешным, но почему бы не использовать порт 9998?

+1

брандмауэр блокирует исходящие соединения на нестандартных портах? –

+0

Я так не думаю, как я могу это проверить? – Darkeden

ответ

2

1 секунда тайм-аута соединения не очень длинная. Задержки в сети могут быть достаточно, чтобы вызвать это, даже если хост/порт действителен. Я бы предложил использовать не менее 2,5 - 5 секунд вместо этого.

Кроме того, вы должны проверить результат fsockopen() на FALSE вместо < 1, чтобы узнать, когда он не работает.

Попробуйте это:

$host = "1.1.1.1"; 
$port = "9998"; 
$checkconn = fsockopen($host, $port, $errno, $errstr, 5); 
if(!$checkconn){ 
    echo "($errno) $errstr"; 
} else { 
    echo 'ok'; 
} 
+0

Я попытался проверить значение FALSE до и даже более высоких тайм-аутов (например, 10), но он никогда не работал ... Я всегда получаю такую ​​же реакцию «Connection Timed Out», – Darkeden

Смежные вопросы