使PHP socket_connect超时

时间:2012-08-09 10:48:06

标签: php sockets timeout ping

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

我无能为力。

2 个答案:

答案 0 :(得分:11)

您可以使用以下options

设置阅读和发送的超时时间
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));

或者,您可以使用non-blocking sockets并定期轮询套接字以查看远程主机是否响应。

答案 1 :(得分:0)

尝试设置default_socket_timeout