Make PHP socket_connect timeout


Make PHP socket_connect timeout

我创建了一个小应用程序来分析网络连接。它从浏览器运行并连接到本地 PHP/Apache 服务器。然后,它要求 PHP 通过原始套接字发送 ping 数据包。问题是,如果我尝试ping的主机不在活动状态或不会回答ping,我们永远不会从服务器获得答案。

我离开套接字请求存在,直到 apache 重新启动。我最近从我的应用程序中得到了好坏参半的结果,我指责 apache 使用了太多的套接字。目前我已经设置了 AJAX 调用的超时,我对此感到满意。但我真的需要让 PHP 超时,这样我就不会有 500,000 个套接字打开给无法访问的主机。

一些示例代码:

$sockconn = @socket_connect($socket, $target, null);
if(!$sockconn)
{
    $raw['error'] = socket_strerror(socket_last_error());
    $raw['status'] = false;
    return $raw;
}

这是不会超时的函数。我需要让它超时。此外,PHP 脚本执行时间不会影响套接字。

我毫无头绪。

您可以使用以下选项设置读取和发送超时:

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

或者,您可以使用非阻塞套接字并定期轮询套接字以查看远程主机是否响应。

尝试设置default_socket_timeout。