php socket 设置超时时间无效,还是要等好久才能返回错误?

发布于 2022-09-12 02:47:47 字数 1348 浏览 24 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文