]> git.gsnw.org Git - fping.git/commitdiff
Fix random output on socket error (reported by Aleksandrs Saveljevs, #56)
authorDavid Schweikert <dws@open.ch>
Thu, 27 Feb 2014 21:56:17 +0000 (22:56 +0100)
committerDavid Schweikert <dws@open.ch>
Thu, 27 Feb 2014 21:56:17 +0000 (22:56 +0100)
ChangeLog
src/fping.c

index 93ef2fa324448e0fc6e91c2c5aae6c871753639b..6ee3f68c9a4d22740fdc79de98e94233650069a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+UNRELEASED  David Schweikert  <david@schweikert.ch>
+  * Fix random output on socket error (reported by Aleksandrs Saveljevs, #56)
+
 2013-11-08  David Schweikert  <david@schweikert.ch>
   * Version 3.8
   * Fix segmentation fault introduced in version 3.7 with loop mode (reported
index 8316cc3a3eefe7eef41ed051ee02920b8b4740c6..ca65a4f5153c10257a83a2697caf0b38e6f003c9 100644 (file)
@@ -136,6 +136,7 @@ extern int h_errno;
 /* response time array flags */
 #define RESP_WAITING    -1
 #define RESP_UNUSED     -2
+#define RESP_ERROR      -3
 
 /* debugging flags */
 #if defined( DEBUG ) || defined( _DEBUG )
@@ -991,7 +992,7 @@ void main_loop()
 
                 /* Send the ping */
                /*printf("Sending ping after %d ms\n", lt/100); */
-                if(!send_ping(s, h)) goto wait_for_reply;
+                send_ping(s, h);
 
                 /* Check what needs to be done next */
                 if(!loop_flag && !count_flag) {
@@ -1410,7 +1411,8 @@ int send_ping( int s, HOST_ENTRY *h )
     char *buffer;
     FPING_ICMPHDR *icp;
     int n;
-        int myseq;
+    int myseq;
+    int ret = 1;
 
     buffer = ( char* )malloc( ( size_t )ping_pkt_size );
     if( !buffer )
@@ -1452,42 +1454,38 @@ int send_ping( int s, HOST_ENTRY *h )
         && errno != EHOSTDOWN
 #endif
     ) {
-        if( verbose_flag || unreachable_flag )
-        {
+        if( verbose_flag || unreachable_flag ) {
             printf( "%s", h->host );
             if( verbose_flag )
                 printf( " error while sending ping: %s\n", strerror( errno ) );
             
             printf( "\n" );
-
-        }/* IF */
+        }
         
-        h->num_sent++;
-        h->num_sent_i++;
-        h->waiting++;
-        num_pingsent++;
-        last_send_time = h->last_send_time;
-        free( buffer );
-        return(1);
-    }
+        if( !loop_flag )
+            h->resp_times[h->num_sent] = RESP_ERROR;
 
-    /* mark this trial as outstanding */
-    if( !loop_flag )
-        h->resp_times[h->num_sent] = RESP_WAITING;
+        ret = 0;
+    }
+    else {
+        /* mark this trial as outstanding */
+        if( !loop_flag )
+            h->resp_times[h->num_sent] = RESP_WAITING;
 
 #if defined( DEBUG ) || defined( _DEBUG )
-    if( sent_times_flag )
-        h->sent_times[h->num_sent] = timeval_diff( &h->last_send_time, &start_time );
-#endif /* DEBUG || _DEBUG */
+        if( sent_times_flag )
+            h->sent_times[h->num_sent] = timeval_diff( &h->last_send_time, &start_time );
+#endif
+    }
 
     h->num_sent++;
     h->num_sent_i++;
     h->waiting++;
     num_pingsent++;
     last_send_time = h->last_send_time;
-    
     free( buffer );
-    return(1);
+
+    return(ret);
 }
 
 
@@ -1637,7 +1635,7 @@ int wait_for_reply(long wait_time)
     {
         if( ( this_count >= 0 ) && ( this_count < trials ) )
         {
-            if( h->resp_times[this_count] != RESP_WAITING )
+            if( h->resp_times[this_count] >= 0 )
             {
                 if( !per_recv_flag )
                 {