static void scan_and_wait(prop_dictionary_t env) { int sroute; sroute = prog_socket(PF_ROUTE, SOCK_RAW, 0); if (sroute < 0) { warn("socket(PF_ROUTE,SOCK_RAW)"); return; } /* NB: only root can trigger a scan so ignore errors */ if (set80211(env, IEEE80211_IOC_SCAN_REQ, 0, 0, NULL) >= 0) { char buf[2048]; struct if_announcemsghdr *ifan; struct rt_msghdr *rtm; do { if (prog_read(sroute, buf, sizeof(buf)) < 0) { warn("read(PF_ROUTE)"); break; } rtm = (struct rt_msghdr *) buf; if (rtm->rtm_version != RTM_VERSION) break; ifan = (struct if_announcemsghdr *) rtm; } while (rtm->rtm_type != RTM_IEEE80211 || ifan->ifan_what != RTM_IEEE80211_SCAN); } prog_close(sroute); }
static int getsocket(void) { int s; s = prog_socket(PF_ROUTE, SOCK_RAW, 0); if (s < 0) err(1, "socket"); return s; }
static void getsocket(void) { if (my_s < 0) { my_s = prog_socket(PF_ROUTE, SOCK_RAW, 0); if (my_s < 0) err(1, "socket"); } }
int getsock(int naf) { static int oaf = -1, s; if (oaf == naf || (oaf != -1 && naf == AF_UNSPEC)) return s; if (oaf != -1) prog_close(s); if (naf == AF_UNSPEC) naf = AF_INET; s = prog_socket(naf, SOCK_DGRAM, 0); if (s == -1) oaf = -1; else oaf = naf; return s; }