Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP套接字超时赢得';不要低于0.5秒_Php_Sockets - Fatal编程技术网

PHP套接字超时赢得';不要低于0.5秒

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

我正在尝试扫描ip范围并从特定设备获取信息。 问题是,尽管我有
SO\u RCVTIMEO
to
array('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机器上工作