ping_receive_all(): Return immediately when select(2) is interrupted.
[liboping.git] / src / oping.c
index bb75d4e..caf655f 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * Object oriented C module to send ICMP and ICMPv6 `echo's.
- * Copyright (C) 2006-2010  Florian octo Forster <ff at octo.it>
+ * Copyright (C) 2006-2011  Florian octo Forster <ff at octo.it>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 # define _POSIX_SAVED_IDS 0
 #endif
 
+#ifndef IPTOS_MINCOST
+# define IPTOS_MINCOST 0x02
+#endif
+
 /* Remove GNU specific __attribute__ settings when using another compiler */
 #if !__GNUC__
 # define __attribute__(x) /**/
@@ -1230,7 +1234,12 @@ int main (int argc, char **argv) /* {{{ */
                        return (1);
                }
 
-               if (ping_send (ping) < 0)
+               status = ping_send (ping);
+               if (status == -EINTR)
+               {
+                       continue;
+               }
+               else if (status < 0)
                {
                        fprintf (stderr, "ping_send failed: %s\n",
                                        ping_get_error (ping));
@@ -1263,14 +1272,13 @@ int main (int argc, char **argv) /* {{{ */
                /* printf ("Sleeping for %i.%09li seconds\n", (int) ts_wait.tv_sec, ts_wait.tv_nsec); */
                while ((status = nanosleep (&ts_wait, &ts_wait)) != 0)
                {
-                       if (errno != EINTR)
+                       if (errno == EINTR)
                        {
-                               perror ("nanosleep");
-                               break;
+                               continue;
                        }
-                       else if (opt_count == 0)
+                       else
                        {
-                               /* sigint */
+                               perror ("nanosleep");
                                break;
                        }
                }