8

我创建了一个小应用程序来分析网络连接。它从浏览器运行并连接到本地 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 脚本执行时间也不会影响套接字。

我一无所知。

4

2 回答 2

14

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

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));

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

于 2012-08-10T10:47:04.887 回答
0

尝试设置default_socket_timeout

于 2012-08-09T10:50:19.310 回答