aboutsummaryrefslogtreecommitdiffstats
path: root/pingu_ping.c
diff options
context:
space:
mode:
Diffstat (limited to 'pingu_ping.c')
-rw-r--r--pingu_ping.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/pingu_ping.c b/pingu_ping.c
index 4f15c32..037fb44 100644
--- a/pingu_ping.c
+++ b/pingu_ping.c
@@ -99,17 +99,22 @@ static void pingu_ping_handle_reply(struct ev_loop *loop,
free(ping);
}
-int pingu_ping_send(struct ev_loop *loop, struct pingu_host *host)
+int pingu_ping_send(struct ev_loop *loop, struct pingu_host *host,
+ int set_status_on_failure)
{
int packetlen = sizeof(struct iphdr) + sizeof(struct icmphdr);
struct pingu_ping *ping;
int seq, r;
+ if ((host->iface->name[0] != '\0') && !host->iface->has_binding)
+ return pingu_host_set_status(host, 0) - 1;
+
seq = pingu_ping_get_seq();
r = icmp_send_ping(host->iface->fd, &host->burst.saddr,
sizeof(host->burst.saddr), seq, packetlen);
if (r < 0) {
- pingu_host_set_status(host, 0);
+ if (set_status_on_failure)
+ pingu_host_set_status(host, 0);
return -1;
}