aboutsummaryrefslogtreecommitdiff
path: root/src/common/wpa_ctrl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/wpa_ctrl.c')
-rw-r--r--src/common/wpa_ctrl.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/common/wpa_ctrl.c b/src/common/wpa_ctrl.c
index c1ce68c1..779b2cf8 100644
--- a/src/common/wpa_ctrl.c
+++ b/src/common/wpa_ctrl.c
@@ -487,7 +487,7 @@ int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len,
void (*msg_cb)(char *msg, size_t len))
{
struct timeval tv;
- struct os_reltime started_at;
+ struct os_reltime started_at, ending_at;
int res;
fd_set rfds;
const char *_cmd;
@@ -543,9 +543,19 @@ retry_send:
}
os_free(cmd_buf);
+ os_get_reltime(&ending_at);
+ ending_at.sec += 10;
+
for (;;) {
- tv.tv_sec = 10;
- tv.tv_usec = 0;
+ struct os_reltime diff;
+
+ os_get_reltime(&started_at);
+ if (os_reltime_before(&ending_at, &started_at))
+ return -2;
+ os_reltime_sub(&ending_at, &started_at, &diff);
+ tv.tv_sec = diff.sec;
+ tv.tv_usec = diff.usec;
+
FD_ZERO(&rfds);
FD_SET(ctrl->s, &rfds);
res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv);