PHP套接字超时赢得';不要低于0.5秒
我正在尝试扫描ip范围并从特定设备获取信息。 问题是,尽管我有PHP套接字超时赢得';不要低于0.5秒,php,sockets,Php,Sockets,我正在尝试扫描ip范围并从特定设备获取信息。 问题是,尽管我有SO\u RCVTIMEOtoarray('sec'=>0,'usec'=>1000) 每个应该超时的请求都会在0.5秒左右。另一方面,其他的只需0.005秒。你可以想象,如果我想扫描一个大的IP范围,那么我注定要失败 我做错了什么,或者如何改进 下面是代码 foreach($ipArray as $ip){ $result = array(); $buf = ''; $from = ''; $sock
SO\u RCVTIMEO
toarray('sec'=>0,'usec'=>1000)
每个应该超时的请求都会在0.5秒左右
。另一方面,其他的只需0.005秒
。你可以想象,如果我想扫描一个大的IP范围,那么我注定要失败
我做错了什么,或者如何改进
下面是代码
foreach($ipArray as $ip){
$result = array();
$buf = '';
$from = '';
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock,SOL_SOCKET,SO_RCVTIMEO,$timeout);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
//socket_bind($sock, $from, 2048);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 0);
socket_sendto($sock, $data1, strlen($data1), 0, $ip, 10001);
$time = microtime(true);
if(!socket_recvfrom($sock, $buf, 512000, 0, $from, $port)){
echo (microtime(true) - $time) . ' elapsed<br><br><br>';
continue;
}
echo (microtime(true) - $time) . ' elapsed<br><br><br>';
$result= parse_result(bin2hex($buf));
socket_close($sock);
}
foreach($ipArray作为$ip){
$result=array();
$buf='';
$from='';
$sock=socket_-create(AF_-INET、sock_-DGRAM、SOL_-UDP);
socket\u set\u选项($sock,SOL\u socket,SO\u RCVTIMEO,$timeout);
socket\u set\u选项($sock,SOL\u socket,SO\u BROADCAST,1);
//套接字绑定($sock$from,2048);
socket\u set\u选项($sock,SOL\u socket,SO\u BROADCAST,0);
socket_sendto($sock,$data1,strlen($data1),0,$ip,10001);
$time=microtime(真);
如果(!socket_recvfrom($sock,$buf,512000,0,$from,$port)){
echo(microtime(true)-$time)。“经过的时间”;
继续;
}
echo(microtime(true)-$time)。“经过的时间”;
$result=parse_result(bin2hex($buf));
插座关闭($sock);
}
请注意,我正在为每个IP创建一个单独的套接字,因为出于某种原因,否则结果会在IP之间混淆,有时我会两次得到相同的结果
在Windows Bitnami计算机上运行此操作
谢谢你,Windows有一个你可以设置的最小超时量,比linux上的要高得多 基本上,
数组('sec'=>0,'usec'=>1000)
usec部分只在Linux机器上工作