Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
340 views
in Technique[技术] by (71.8m points)

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(), "
";
        }


    }

1.需求: 好多电脑设置了固定ip,我想通过访问ip查看这些电脑中哪些在线,哪些不在线
2.问题:现在如果能正常在线的ip特别快就能返回,如果我随便写个假的ip就要等到20多s才能返回错误,我并不想用这么久,内网的话1s足够了,不通就是不在线,但是我设置了超时时间为1s还是无效的,还是要等好久
3.麻烦问下有没有更好的处理办法,或者我这么写为啥不行?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...