From: David Schweikert Date: Mon, 21 May 2012 12:56:01 +0000 (+0200) Subject: Performance optimization for big select timeouts (#10, Andrey Bondarenko), Fix restar... X-Git-Url: https://git.gsnw.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74066a00ea229a06318654dc456d79a9b5dfbb89;p=fping.git Performance optimization for big select timeouts (#10, Andrey Bondarenko), Fix restart of select call after interrupt signal (#8, Boian Bonev) --- diff --git a/ChangeLog b/ChangeLog index c04274e..2186074 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Unreleased + * Performance optimization for big select timeouts (#10, Andrey Bondarenko) + * Fix restart of select call after interrupt signal (#8, Boian Bonev) + Thu Apr 26 2012 David Schweikert - Revision v3.1 diff --git a/src/fping.c b/src/fping.c index 464193d..3af42e6 100644 --- a/src/fping.c +++ b/src/fping.c @@ -2587,13 +2587,13 @@ void u_sleep( int u_sec ) struct timeval to; fd_set readset, writeset; +select_again: to.tv_sec = u_sec / 1000000; to.tv_usec = u_sec - ( to.tv_sec * 1000000 ); FD_ZERO( &readset ); FD_ZERO( &writeset ); -select_again: nfound = select( 0, &readset, &writeset, NULL, &to ); if(nfound < 0) { if(errno == EINTR) { @@ -2635,18 +2635,20 @@ int recvfrom_wto( int s, char *buf, int len, FPING_SOCKADDR *saddr, long timo ) struct timeval to; fd_set readset, writeset; - to.tv_sec = 0; - to.tv_usec = timo * 10; - while (to.tv_usec > 1000000) { - to.tv_sec++; - to.tv_usec -= 1000000; +select_again: + if(timo < 100000) { + to.tv_sec = 0; + to.tv_usec = timo * 10; + } + else { + to.tv_sec = timo / 100000 ; + to.tv_usec = (timo % 100000) * 10 ; } FD_ZERO( &readset ); FD_ZERO( &writeset ); FD_SET( s, &readset ); -select_again: nfound = select( s + 1, &readset, &writeset, NULL, &to ); if(nfound < 0) { if(errno == EINTR) {