PHP警告:socket_read():无法从套接字[10060]读取:连接尝试失败

时间:2018-08-02 12:37:38

标签: php sockets

在我的PHP错误日志中,我收到这样的多个警告:

  

PHP警告:socket_read():无法从套接字[10060]读取:连接尝试失败,因为一段时间后被连接方未正确响应,或者由于连接的主机未能响应而导致建立的连接失败。 / p>

我想以某种方式删除此警告,因为有时我要ping的主机IP将脱机,然后发送这些警告。在执行读取之前可以检查吗?这是下面的代码:

function ping($host){
    defined('COUNT') or define('COUNT', '3');
    defined('INTERVAL') or define('INTERVAL', '1');

    $ipAddress = gethostbyname($host);
    $protocolNumber = getprotobyname("icmp");
    $socket         = socket_create(AF_INET, SOCK_RAW, $protocolNumber);

    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 1, 'usec' => 0));
    socket_connect($socket, $host, 0);
    $hostIsAlive = 0;

    for ($i = 0; $i < COUNT; $i++) {
        $startTime = microtime(true);
        $package  = "\x08\x00\x19\x2f\x00\x00\x00\x00\x70\x69\x6e\x67";
        socket_send($socket, $package, strlen($package), 0);
        if (socket_read($socket, 255)) {
            $hostIsAlive = 1;
            echo "successful ping to $ipAddress\n";
        } else {
            echo "failed to ping $ipAddress\n";
        }
        if ($i < (COUNT - 1)) {
            sleep(INTERVAL);
        }
    }
    socket_close($socket);
    return $hostIsAlive;
}

0 个答案:

没有答案