我正在开发一款带有自定义操作系统(iMX6 上的 Yocto)的嵌入式设备。
设备使用 hostapd 创建 WLAN。我使用 libnl 列出已连接的 WiFi 客户端,我的代码基于iw
获取客户端 MAC 地址。
当 Linux PC 客户端或 Android 客户端连接和断开连接时,检测工作非常顺利。但对于 iOS 设备,断开连接需要很长时间:
- 检测到连接;
- 有时会检测到断开连接(当我关闭 iOS 设备上的 WiFi 按钮时),并且该设备在我的应用程序中显示为“未连接”;
- 有时无法检测到断开连接。尽管 iOS 上的 WiFi 已关闭,但仍可以看到设备。该命令
iw dev wlan0 station dump |grep Station
还显示未连接的客户端。对设备执行 ping 操作显示设备没有响应。nmap 命令也显示设备未连接。断开连接发生在 1-2 分钟后。
这是与 iOS 连接时的 hostapd 日志:
wlan0: STA 04:69:f8:0a:1e:6e IEEE 802.11: authenticated
HT: Forty MHz Intolerant is set by STA 04:69:f8:0a:1e:6e in Association Request
wlan0: STA 04:69:f8:0a:1e:6e IEEE 802.11: associated (aid 2)
wlan0: AP-STA-CONNECTED 04:69:f8:0a:1e:6e
wlan0: STA 04:69:f8:0a:1e:6e WPA: pairwise key handshake completed (RSN)
断开连接成功时:
wlan0: AP-STA-DISCONNECTED 04:69:f8:0a:1e:6e
wlan0: STA 04:69:f8:0a:1e:6e IEEE 802.11: disassociated
wlan0: STA 04:69:f8:0a:1e:6e IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
断开连接超时时:
wlan0: AP-STA-DISCONNECTED 04:69:f8:0a:1e:6e
wlan0: STA 04:69:f8:0a:1e:6e IEEE 802.11: disassociated due to inactivity
wlan0: STA 04:69:f8:0a:1e:6e IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
为了进行比较,这是与 Android 设备的连接/断开连接(请注意,没有不活动超时):
# Connect
wlan0: STA 74:04:2b:ea:95:86 IEEE 802.11: authenticated
wlan0: STA 74:04:2b:ea:95:86 IEEE 802.11: associated (aid 2)
wlan0: AP-STA-CONNECTED 74:04:2b:ea:95:86
wlan0: STA 74:04:2b:ea:95:86 WPA: pairwise key handshake completed (RSN)
# Disconnect
wlan0: AP-STA-DISCONNECTED 74:04:2b:ea:95:86
这是我目前尝试过的:
- 将 ap_max_inactivity 更改为 5 秒 -> 将断开连接时间缩短至 10-15 秒
- 刷新 ARP 缓存(未成功)
这是 hostapd 配置的问题吗?我不知道修改了哪个参数。或者这个问题可能与 iOS 有关。