IOCTL SIOCGIWSCAN ошибка E2BIG

Я пытаюсь использовать IOCTL "SIOCGIWSCAN" от беспроводного добавочного номера, чтобы получить результат сканирования из драйвера:

проблема в том, что iwrq.u.data.length всегда равен 0, и я постоянно получаю ошибку E2BIG.

Любая идея об этой ошибке и каковы возможные причины этого?

это фрагмент кода, который используется для получения результата сканирования "это похоже на команду iwlist от беспроводных инструментов": Примечание: iwlist отлично работает: "сканирование iwlist wlan0" дает результат сканирования?

....

while (true) {

  fd_set   rfds;        
  int       last_fd;    
  int       retc;
  // re init
  FD_ZERO(&rfds);
  last_fd = -1;

  retc = select(last_fd + 1, &rfds, NULL, NULL, &time_out);
  int ret_errno = errno; 

  if(retc < 0) // errno check the type 
  {
     if(ret_errno == EAGAIN || ret_errno == EINTR) 
     {
        continue; // try another time          
     } 
        goto exit;
  }

  if(retc == 0)
  {

     iwrq.u.data.pointer = buffer; 
     iwrq.u.data.length = data_length;
     iwrq.u.data.flags = 0 ; 

       if(ioctl(sk_fd, SIOCGIWSCAN , &iwrq) < 0){
        errn = errno;

     if(errn == EAGAIN)
     {
       if(num_try > 0){ 
            num_try --; // decrease max try       
        }
        else
        {
            goto exit;
        }
        time_out.tv_sec = 0;
        time_out.tv_usec = 300000; // sleep for 300 ms
        continue;
     }



     else if(errn == E2BIG){

           // buffer too small to hold result 
           // extend it 
           if(iwrq.u.data.length > data_length) 
           {
               data_length *= 2;
               buffer =(char *) realloc(buffer,data_length * sizeof(char));
              if(!buffer){
              goto exit;
              }
           }
           // setup timer
        time_out.tv_sec = 0;
        time_out.tv_usec = 300000; // 100 ms
           continue; // try again
     } 
        //ioctl Wireless Scan Unhandled ERROR 
        goto exit;
     }else
  {
    break;  // we have result go and parse it
  }

  }

  /// parse scan result section
  ....

0 ответов

Другие вопросы по тегам