aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/server.c b/server.c
index 4c19439..dec3080 100644
--- a/server.c
+++ b/server.c
@@ -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: