发送探测请求而不等待C中的答案

时间:2017-02-01 11:18:05

标签: c network-programming

对于我正在进行的项目,我必须定期向所选SSID发送探测请求(每10 ms约10次)。

目前我正在使用以下代码执行此操作:

char *args[] = {"iwlist", INTERFACE, "scan", "essid", ssid, (char *) NULL};
runQuietlyNonblocking(args);

其中runQuietlyNonblocking使用execvp和fork在args中运行命令,而不等待新线程完成。

但是由于iwlist扫描等待探测器答案,这需要比创建新探测请求所需的时间更多,探测请求会被发送但是大约半小时后我得到了大约10000个线程,程序因内存不足而崩溃。

我正在使用raspbian lite安装的raspberry pi。 有没有更好的方法来发送探测请求而无需等待答案?我可以手动发送探测请求还是告诉iwlist不要查找响应?

1 个答案:

答案 0 :(得分:0)

有几个选择。据我所知popen()与" w"参数不等待命令执行,虽然它会分叉进程并且pclose()将等待命令执行。 system()只是等待命令执行,但你可能会尝试将它提供给shell,就像这样

system("iwlist wlan0 scan &")

也就是说,如果你遇到了iwlist。 作为替代方案,您可以尝试使用wpa_supplicant。它有"扫描"接口和" scan_results",第一个发送请求,而后者发出结果。

  for (;;)
  {
    FILE *fp = popen ("wpa_cli -i wlan0 scan", "w");
    if (fp)
      pclose (fp);
    sleep (1);
  }

(暗示wpa_supplicant启动并运行)。

最后但并非最不重要的是,有些驱动程序允许使用自己的界面进行后台扫描,已经在专有的Redpine驱动程序上看到过。

相关问题