Potrebujem [podtrzene]rýchlo[/podtrzene] otestovať či sú porty na daných ip otvorené. Zatiaľ cyklicky volám cca toto (iné riešenie som ani inde nenašiel):
$timeout = 2; // 2 sec na otestovanie
$status = ST_UNKNOWN;
if ($f = @fsockopen($ip,$port,$errno,$errstr,$timeout))
{
fclose($f); $status = ST_ONLINE; // zapnuty
} else $status = ST_OFFLINE; // vypnuty
Potrebujem aby to bolo rýchlejšie (zisťujem stav asi 10 ip naraz). Ak je host online => no problem, ak je host offline->stojí to 2 sec - čo je veľa. Keď zmením timeout na 0.5s, niekedy ani nestihne zisťiť že je server online. To mi však vôbec nevadí, chcem vtedy vedieť, že ide o timeout - nestihol => $status = ST_UNKNOWN (neznámy); alebo je port naozaj closed => $status = ST_OFFLINE;
Pozeral som ne tie chybové hlásenia $errno, $errstr, ale stále vracia to isté: 10060 - Nestihol v danom intervale odpovedať.
Do sietí sa až tak nevyznám, ale myslím že ak je host online, a daný port ma offline, tak by mohol odpovedať, že port je closed a tak už viac nemusím čakať. Alebo zisťovanie offline stavu naozaj funguje iba na základe toho, že server neodpovie do $timeout času ?
Rýchly test viacerých host:port - Napadá niekoho nejaké iné riešenie ?