diff options
| -rw-r--r-- | server.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -13,7 +13,7 @@ struct server { - int fd, cfds[2]; + int fd, cfds[2], lastfd; struct server_client { @@ -267,6 +267,8 @@ again: goto end; } + struct server_client *sel = NULL; + for (struct {struct server_client *c; size_t j;} _ = {.c = s->c, .j = CLIENTS}; _.c; _.c = _.c->next, _.j++) { @@ -274,12 +276,21 @@ again: if (p->revents) { - *io = true; - ret = _.c; - goto end; + sel = _.c; + + if (n_clients == 1 || p->fd != s->lastfd) + break; } } + if (sel) + { + *io = true; + ret = sel; + s->lastfd = sel->fd; + goto end; + } + fprintf(stderr, "%s: unlisted fd\n", __func__); end: |
