如何使用 libnm 在 Wi-Fi 设备上请求扫描?

问题描述

文档建议我使用 nm-device-wifi-request-scan-async,但我不明白如何理解它何时完成扫描。我应该传递的正确的第二个参数是什么,它是如何构造的以及我传递给 nm-device-wifi-request-scan-finish内容是什么?

我已经尝试使用 nm-device-wifi-get-last-scan 并确定扫描是刚刚发生还是上次扫描是很久以前的,但它似乎没有更新时间扫描 - 即,在请求扫描并打印出 nm-utils-get-timestamp-msec 和上次扫描之间的时间后,它只会在我重新启动整个程序时增加和减少,出于某种原因......

我真正需要的是每 x 秒请求一次扫描并了解它是否发生了。 已弃用 同步函数似乎允许通过回调函数实现这一点,但我不理解异步 :(

解决方法

nm_device_wifi_request_scan_async() 开始扫描,需要一段时间才能得到结果。

nm_device_wifi_get_last_scan() 时间戳被碰撞时,您将知道结果何时准备就绪。

它只会在我重新启动整个程序时增加和减少,出于某种原因......

last-scan 应该在 clock_gettime(CLOCK_BOOTTIME) 范围内。这应该永远不会减少(除非重新启动)。请参阅man clock_gettime

但我不懂异步

在这方面,sync 方法与 async 方法没有区别。他们都只开始新的扫描,当他们竞争时,NetworkManager 将要扫描(或很快开始)。由于其他原因 (https://smcv.pseudorandom.co.uk/2008/11/nonblocking/),不推荐使用同步方法。