Network programming 如何知道扫描何时完成

Network programming 如何知道扫描何时完成,network-programming,linux-kernel,embedded-linux,ioctl,netlink,Network Programming,Linux Kernel,Embedded Linux,Ioctl,Netlink,我用下面的代码触发扫描 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, d

我用下面的代码触发扫描

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);
但是什么也没发生,所以:如果你有足够的耐心阅读到这一点,请帮我回答两个问题

1) 我如何知道扫描何时完成(如何订阅此通知或阅读通知等)

2) 收到通知后,我如何阅读邮件(我在下面理解的方法)


要读取扫描的数据,我需要发送类似于触发扫描的消息,但带有消息NL80211_CMD_GET_scan,然后数据将存储在nl_套接字的有效负载中,对吗?

发送NL80211_CMD_TRIGGER_scan以启动扫描关闭。(一个接一个会失败) 发送后,当收到NL80211_CMD_NEW_scan_结果时,请注意扫描是否完成。 NL80211_CMD_GET_SCAN命令用于请求结果。 您将为找到的每个站点返回一条消息,因此请准备好处理多条消息

  • NL80211_命令_触发器_扫描到扫描关闭
  • 收听NL80211_CMD_NEW_SCAN_结果
  • NL80211_CMD_GET_SCAN命令请求结果
  • 每找到一个电台都会收到一条信息