From: <st...@us...> - 2014-01-26 11:08:49
|
Revision: 7368 http://sourceforge.net/p/xymon/code/7368 Author: storner Date: 2014-01-26 11:08:47 +0000 (Sun, 26 Jan 2014) Log Message: ----------- xymonproxy: Improve error logging in case of select() failure Modified Paths: -------------- branches/4.3.14/xymonproxy/xymonproxy.c Modified: branches/4.3.14/xymonproxy/xymonproxy.c =================================================================== --- branches/4.3.14/xymonproxy/xymonproxy.c 2014-01-26 11:08:21 UTC (rev 7367) +++ branches/4.3.14/xymonproxy/xymonproxy.c 2014-01-26 11:08:47 UTC (rev 7368) @@ -227,6 +227,7 @@ int opt; conn_t *chead = NULL; struct sigaction sa; + int selectfailures = 0; /* Statistics info */ time_t startuptime = gettimer(); @@ -967,8 +968,20 @@ else { selecttmo.tv_sec = 1; selecttmo.tv_usec = 0; } + n = select(maxfd+1, &fdread, &fdwrite, NULL, &selecttmo); - if (n <= 0) { + + if (n < 0) { + errprintf("select() failed: %s\n", strerror(errno)); + if (++selectfailures > 5) { + errprintf("Too many select failures, aborting\n"); + exit(1); + } + } + else if (n == 0) { + /* Timeout */ + if (selectfailures > 0) selectfailures--; + getntimer(&tmo); for (cwalk = chead; (cwalk); cwalk = cwalk->next) { switch (cwalk->state) { @@ -988,6 +1001,8 @@ } } else { + if (selectfailures > 0) selectfailures--; + for (cwalk = chead; (cwalk); cwalk = cwalk->next) { switch (cwalk->state) { case P_REQ_READING: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |