From 9cc4dd5515940662d13590ed2e68bcb2608accc9 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 5 May 2017 11:11:55 +0200 Subject: [PATCH] src/liboping.c: Ensure ping_send() returns non-zero on success. This is the documented behavior. --- src/liboping.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/liboping.c b/src/liboping.c index 117cbfa..f4cf614 100644 --- a/src/liboping.c +++ b/src/liboping.c @@ -1367,8 +1367,6 @@ int ping_send (pingobj_t *obj) struct timeval nowtime; struct timeval timeout; - int ret = 0; - _Bool need_ipv4_socket = 0; _Bool need_ipv6_socket = 0; @@ -1432,6 +1430,12 @@ int ping_send (pingobj_t *obj) * receive a "pong" yet. */ int pings_in_flight = 0; + /* pongs_received is the number of echo replies received. Unless there + * is an error, this is used as the return value of ping_send(). */ + int pongs_received = 0; + + int error_count = 0; + while (pings_in_flight > 0 || host_to_ping != NULL) { fd_set read_fds; @@ -1512,13 +1516,19 @@ int ping_send (pingobj_t *obj) if (obj->fd6 != -1 && FD_ISSET (obj->fd6, &read_fds)) { if (ping_receive_one (obj, &nowtime, AF_INET6) == 0) + { pings_in_flight--; + pongs_received++; + } continue; } if (obj->fd4 != -1 && FD_ISSET (obj->fd4, &read_fds)) { if (ping_receive_one (obj, &nowtime, AF_INET) == 0) + { pings_in_flight--; + pongs_received++; + } continue; } @@ -1533,13 +1543,15 @@ int ping_send (pingobj_t *obj) if (ping_send_one (obj, host_to_ping, write_fd) == 0) pings_in_flight++; else - ret--; + error_count++; host_to_ping = host_to_ping->next; continue; } } /* while (1) */ - return (ret); + if (error_count) + return (-1 * error_count); + return (pongs_received); } /* int ping_send */ static pinghost_t *ping_host_search (pinghost_t *ph, const char *host) -- 2.30.2