X-Git-Url: http://dolda2000.com/gitweb/?p=icmp-dn.git;a=blobdiff_plain;f=icmpdnd.c;h=3cd6f5f3cee1d12bf765126a033b6e7d59d296b6;hp=2b59175a6ff56a1c421d8803a68a0ff7aff20e5b;hb=dcb0aee6871c25a9dfc1be3c663c3cbbf5efec66;hpb=1ac6ec0ce024a92a3ee61a1a0530613b1e335aa8 diff --git a/icmpdnd.c b/icmpdnd.c index 2b59175..3cd6f5f 100644 --- a/icmpdnd.c +++ b/icmpdnd.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -137,6 +138,7 @@ int main(int argc, char **argv) struct reqhdr req; struct rephdr rep; struct iphdr iphdr; + time_t curtime, lasterr; daemonize = 1; ttl = 3600; @@ -168,15 +170,23 @@ int main(int argc, char **argv) openlog("icmpdnd", LOG_PID, LOG_DAEMON); alive = 1; + lasterr = 0; while(alive) { namelen = sizeof(name); ret = recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&name, &namelen); + + curtime = time(NULL); if(ret < 0) { if(errno == EINTR) continue; syslog(LOG_ERR, "error in receiving datagram: %m"); - exit(1); + if(lasterr == curtime) { + syslog(LOG_CRIT, "exiting due to repeated errors"); + exit(1); + } + lasterr = curtime; } + if(ret < sizeof(iphdr) + sizeof(req)) continue; memcpy(&iphdr, buf, sizeof(iphdr));