]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Unix: Substituted select -> poll also in congestion checker
authorJan Moskyto Matejka <mq@ucw.cz>
Fri, 18 Mar 2016 10:44:28 +0000 (11:44 +0100)
committerJan Moskyto Matejka <mq@ucw.cz>
Fri, 18 Mar 2016 10:47:13 +0000 (11:47 +0100)
It does strange things when even one fd larger than FD_SETSIZE is
passed to select().

sysdep/unix/io.c

index b769de583d218cd485ae37b9f62a46952179f372..eb1c1cadcd97192a6c0e3e99a0b544db2072c8df 100644 (file)
@@ -1679,19 +1679,12 @@ sk_maybe_write(sock *s)
 int
 sk_rx_ready(sock *s)
 {
-  fd_set rd, wr;
-  struct timeval timo;
   int rv;
-
-  FD_ZERO(&rd);
-  FD_ZERO(&wr);
-  FD_SET(s->fd, &rd);
-
-  timo.tv_sec = 0;
-  timo.tv_usec = 0;
+  struct pollfd pfd = { .fd = s->fd };
+  pfd.events |= POLLIN;
 
  redo:
-  rv = select(s->fd+1, &rd, &wr, NULL, &timo);
+  rv = poll(&pfd, 1, 0);
 
   if ((rv < 0) && (errno == EINTR || errno == EAGAIN))
     goto redo;