я запускать сканирование с следующим кодомКак знать, когда сканирование закончится
struct nl_msg *msg = nlmsg_alloc();
struct nlmsghdr *hdr;
struct genlmsghdr cmd = { .cmd = NL80211_CMD_TRIGGER_SCAN };
struct nl_sock *sock = nl_socket_alloc();
int dev = if_nametoindex("wlan0");
nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev);
hdr = nlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, NLMSG_NOOP, 0, 0);
memcpy(nlmsg_data(hdr), &cmd, sizeof(cmd));
nl_send_auto(sock, msg);
Теперь, как я должен знать, когда сканирование закончится, и как я могу получить? Во всех местах, которые я искал до сих пор, есть «Вы получите уведомление NL80211_CMD_NEW_SCANS в группе« многоадресной рассылки »сканирования,« Как мне подписаться на него? я зарегистрировал свой обратный вызов, попытался
nl_socket_add_memberships(sock, RTN_MULTICAST);
и после этого прослушивать сообщения в то время как с
while (1)
nl_recvmsgs_default(sock);
, но ничего не произошло, так: если у вас хватит терпения дочитать до этого момента, пожалуйста, помогите мне с 2-мя вопросами
1) Как я знаю, когда сканирование закончится (как подписаться на этом извещений, или читать их и т.д.)
2) Как я могу читать сообщения после NOTIF (метод, как я понимаю ниже)
Для чтения отсканированных данных мне нужно отправить сообщение, подобное тому, которое запускает сканирование, но с сообщением NL80211_CMD_GET_SCAN, и после этого данные будут сохранены в полезной нагрузке nl_socket, верно?