From f2e1bc241911387b68258346f2aa9e8b2646107c Mon Sep 17 00:00:00 2001 From: Karl Heyes Date: Fri, 20 Jun 2003 18:50:24 +0000 Subject: [PATCH] handle error returned from listening sockets, can cause busy looping svn path=/trunk/icecast/; revision=4986 --- src/connection.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/connection.c b/src/connection.c index 749ecda2..47df2ded 100644 --- a/src/connection.c +++ b/src/connection.c @@ -145,11 +145,31 @@ static int wait_for_serversock(int timeout) return -1; } else { + int dst; for(i=0; i < global.server_sockets; i++) { - if(ufds[i].revents == POLLIN) + if(ufds[i].revents & POLLIN) return ufds[i].fd; + if(ufds[i].revents & (POLLHUP|POLLERR|POLLNVAL)) + { + if (ufds[i].revents & (POLLHUP|POLLERR)) + { + close (global.serversock[i]); + WARN0("Had to close a listening socket"); + } + global.serversock[i] = -1; + } } - return -1; /* Shouldn't happen */ + /* remove any closed sockets */ + for(i=0, dst=0; i < global.server_sockets; i++) + { + if (global.serversock[i] == -1) + continue; + if (i!=dst) + global.serversock[dst] = global.serversock[i]; + dst++; + } + global.server_sockets = dst; + return -1; } #else fd_set rfds;