Make global UNIX socket non-blocking for ctrl_iface
This keeps wpa_supplicant from hanging forever if the other end of the
socket dies. This is similar to the earlier commit
4fdc8def88
to make the global control
interface befave in the same way.
Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
3ed2814a1e
commit
8d6e035072
1 changed files with 15 additions and 0 deletions
|
@ -722,6 +722,7 @@ wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
||||||
struct ctrl_iface_global_priv *priv;
|
struct ctrl_iface_global_priv *priv;
|
||||||
struct sockaddr_un addr;
|
struct sockaddr_un addr;
|
||||||
const char *ctrl = global->params.ctrl_interface;
|
const char *ctrl = global->params.ctrl_interface;
|
||||||
|
int flags;
|
||||||
|
|
||||||
priv = os_zalloc(sizeof(*priv));
|
priv = os_zalloc(sizeof(*priv));
|
||||||
if (priv == NULL)
|
if (priv == NULL)
|
||||||
|
@ -864,6 +865,20 @@ wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
||||||
}
|
}
|
||||||
|
|
||||||
havesock:
|
havesock:
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make socket non-blocking so that we don't hang forever if
|
||||||
|
* target dies unexpectedly.
|
||||||
|
*/
|
||||||
|
flags = fcntl(priv->sock, F_GETFL);
|
||||||
|
if (flags >= 0) {
|
||||||
|
flags |= O_NONBLOCK;
|
||||||
|
if (fcntl(priv->sock, F_SETFL, flags) < 0) {
|
||||||
|
perror("fcntl(ctrl, O_NONBLOCK)");
|
||||||
|
/* Not fatal, continue on.*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
eloop_register_read_sock(priv->sock,
|
eloop_register_read_sock(priv->sock,
|
||||||
wpa_supplicant_global_ctrl_iface_receive,
|
wpa_supplicant_global_ctrl_iface_receive,
|
||||||
global, priv);
|
global, priv);
|
||||||
|
|
Loading…
Reference in a new issue