Axe*_*ala 8 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;
}
Run Code Online (Sandbox Code Playgroud)
这是不会超时的功能.我需要让它超时.PHP脚本执行时间也不会影响套接字.
我很无能为力.
Sjo*_*erd 13
您可以使用以下选项设置读取和发送的超时:
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));
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用非阻塞套接字并定期轮询套接字以查看远程主机是否响应.