From 42409f7f228083dad788efd4ed3cc96d26712c6f Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 13 Jul 2011 20:57:12 +0200 Subject: pingu: try bind socket to interface every burst It might be an interface that disappeared and came back, e.g ppp0. We also don't even try unless we have a successful binding. --- pingu_ping.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'pingu_ping.c') 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; } -- cgit v1.2.3