1. 使用的前提
使用wpa_supplicant
管理WIFI
连接,系统是Linux操作系统。
下文中,所有的连接成功都指的是物理连接层的连接成功,而不是协议层的连接成功。
下文中的bssid
都不是实际监听到的,只是为了随意修改了的值。
2. 事件的监听
在设置和连接网络的过程中,创建socket
监听wpa_supplicant
的状态信息日志。
这里主要监听了如下的两种事件:
- CTRL-EVENT-DISCONNECTED
- CTRL-EVENT-CONNECTED
在连接WIFI的过程中,如果连接WIFI不成功,往往会收到CTRL-EVENT-DISCONNECTED
事件;连接成功的时候会收到CTRL-EVENT-CONNECTED
事件。
3. 相关事件的示例
在接收到的事件中,包含的不是对应的ssid
,而是bssid
。
连接成功的示例:
<3>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:01 completed [id=1 id_str=]
连接不成功,或者断开连接的示例:
<3>CTRL-EVENT-DISCONNECTED bssid=00:00:00:00:00:01 reason=3 locally_generated=1
4. 操作行为与相关接收到的事件
4.1 理想接收到的消息
考虑的情况:断开其他网络连接当前网络
这样首先会接收到断开网络的CTRL-EVENT-DISCONNECTED
事件,如果当前网络连接成功的话,会接收到当前网络的CTRL-EVENT-CONNECTED
事件。
在上面接收到的CTRL-EVENT-CONNECTED
中包含reason
,这类操作中,观察到接收的都是3。
4.2 先接收到断开时间立马收到连接成功事件
在要连接的网络上,先收到CTRL-EVENT-DISCONNECTED
事件,在不到一秒后(某次,当时日志记录间隔为12ms),立即收到CTRL-EVENT-CONNECTED
事件。并且这两个事件中对应的bssid
是同一个。
上述的情况,并不是总能观察到。有时候只能收到连接到的bssid
的CTRL-EVENT-CONNECTED
事件。
观察到,CTRL-EVENT-CONNECTED
中包含reason
也都是3。
4.3 多次收到连接成功的事件
在已经连接到某个网络之后,仍旧能够多次收到CTRL-EVENT-CONNECTED
事件,在观察到的现象中,连接的同属于相同的ssid
,bssid
不同;在我设置的网络中,它们的频率是不同的。