|
@@ -381,6 +381,7 @@ struct iapp_data * iapp_init(struct hostapd_data *hapd, const char *iface)
|
|
|
struct sockaddr_in *paddr, uaddr;
|
|
|
struct iapp_data *iapp;
|
|
|
struct ip_mreqn mreq;
|
|
|
+ int reuseaddr = 1;
|
|
|
|
|
|
iapp = os_zalloc(sizeof(*iapp));
|
|
|
if (iapp == NULL)
|
|
@@ -443,6 +444,18 @@ struct iapp_data * iapp_init(struct hostapd_data *hapd, const char *iface)
|
|
|
os_memset(&uaddr, 0, sizeof(uaddr));
|
|
|
uaddr.sin_family = AF_INET;
|
|
|
uaddr.sin_port = htons(IAPP_UDP_PORT);
|
|
|
+
|
|
|
+ if (setsockopt(iapp->udp_sock, SOL_SOCKET, SO_REUSEADDR, &reuseaddr,
|
|
|
+ sizeof(reuseaddr)) < 0) {
|
|
|
+ wpa_printf(MSG_INFO,
|
|
|
+ "iapp_init - setsockopt[UDP,SO_REUSEADDR]: %s",
|
|
|
+ strerror(errno));
|
|
|
+ /*
|
|
|
+ * Ignore this and try to continue. This is fine for single
|
|
|
+ * BSS cases, but may fail if multiple BSSes enable IAPP.
|
|
|
+ */
|
|
|
+ }
|
|
|
+
|
|
|
if (bind(iapp->udp_sock, (struct sockaddr *) &uaddr,
|
|
|
sizeof(uaddr)) < 0) {
|
|
|
wpa_printf(MSG_INFO, "iapp_init - bind[UDP]: %s",
|