public function terminal_status($ip)
{
try {
$port = 80;
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { //IPv6
$socket = socket_create(AF_INET6, SOCK_STREAM, SOL_TCP);
} elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { //IPv4
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
} else {
return false;
}
//接收套接流的最大超时时间1秒,后面是微秒单位超时时间,设置为零,表示不管它
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 800000));
//发送套接流的最大超时时间为6秒
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 1, "usec" => 800000));
if ($socket) {
$ok = socket_connect($socket, $ip, $port);
var_dump($ok);
socket_close($socket);
return $ok;
}else{
return false;
}
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "
";
}
}
1.需求: 好多电脑设置了固定ip,我想通过访问ip查看这些电脑中哪些在线,哪些不在线
2.问题:现在如果能正常在线的ip特别快就能返回,如果我随便写个假的ip就要等到20多s才能返回错误,我并不想用这么久,内网的话1s足够了,不通就是不在线,但是我设置了超时时间为1s还是无效的,还是要等好久
3.麻烦问下有没有更好的处理办法,或者我这么写为啥不行?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…