Browse Source

Detach ctrl_iface monitor if the client socket is removed

No need to wait for 10 errors when using UNIX domain socket; we can
detach the client immediately on ENOENT.
Jouni Malinen 16 years ago
parent
commit
c5aaa01562
2 changed files with 10 additions and 6 deletions
  1. 5 4
      hostapd/ctrl_iface.c
  2. 5 2
      wpa_supplicant/ctrl_iface_unix.c

+ 5 - 4
hostapd/ctrl_iface.c

@@ -570,11 +570,12 @@ static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level,
 			msg.msg_name = &dst->addr;
 			msg.msg_namelen = dst->addrlen;
 			if (sendmsg(hapd->ctrl_sock, &msg, 0) < 0) {
-				fprintf(stderr, "CTRL_IFACE monitor[%d]: ",
-					idx);
-				perror("sendmsg");
+				int _errno = errno;
+				wpa_printf(MSG_INFO, "CTRL_IFACE monitor[%d]: "
+					   "%d - %s",
+					   idx, errno, strerror(errno));
 				dst->errors++;
-				if (dst->errors > 10) {
+				if (dst->errors > 10 || _errno == ENOENT) {
 					hostapd_ctrl_iface_detach(
 						hapd, &dst->addr,
 						dst->addrlen);

+ 5 - 2
wpa_supplicant/ctrl_iface_unix.c

@@ -514,9 +514,12 @@ static void wpa_supplicant_ctrl_iface_send(struct ctrl_iface_priv *priv,
 			msg.msg_name = (void *) &dst->addr;
 			msg.msg_namelen = dst->addrlen;
 			if (sendmsg(priv->sock, &msg, 0) < 0) {
-				perror("sendmsg(CTRL_IFACE monitor)");
+				int _errno = errno;
+				wpa_printf(MSG_INFO, "CTRL_IFACE monitor[%d]: "
+					   "%d - %s",
+					   idx, errno, strerror(errno));
 				dst->errors++;
-				if (dst->errors > 10) {
+				if (dst->errors > 10 || _errno == ENOENT) {
 					wpa_supplicant_ctrl_iface_detach(
 						priv, &dst->addr,
 						dst->addrlen);