]> git.gsnw.org Git - fping.git/commitdiff
Performance optimization for big select timeouts (#10, Andrey Bondarenko), Fix restar...
authorDavid Schweikert <david@schweikert.ch>
Mon, 21 May 2012 12:56:01 +0000 (14:56 +0200)
committerDavid Schweikert <david@schweikert.ch>
Mon, 21 May 2012 12:56:01 +0000 (14:56 +0200)
ChangeLog
src/fping.c

index c04274e7e7445ac8a7708ef634b4580350e8a665..21860740db01124e8e6ff1cd4f2f926e395d47de 100644 (file)
--- 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 <david@schweikert.ch>
 - Revision v3.1
index 464193d37bf9b6af85ee6dd1ddcdfe27b46286a6..3af42e68a776172a60e40c9f2398afa09dd9cc4f 100644 (file)
@@ -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) {