php socket 设置超时时间无效,还是要等好久才能返回错误?
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(), "\n";
}
}
1.需求: 好多电脑设置了固定ip,我想通过访问ip查看这些电脑中哪些在线,哪些不在线
2.问题:现在如果能正常在线的ip特别快就能返回,如果我随便写个假的ip就要等到20多s才能返回错误,我并不想用这么久,内网的话1s足够了,不通就是不在线,但是我设置了超时时间为1s还是无效的,还是要等好久
3.麻烦问下有没有更好的处理办法,或者我这么写为啥不行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论