git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/icmp-dn@215
959494ce-11ee-0310-bf91-
de5d638817bd
#include <string.h>
#include <errno.h>
#include <syslog.h>
#include <string.h>
#include <errno.h>
#include <syslog.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
struct reqhdr req;
struct rephdr rep;
struct iphdr iphdr;
struct reqhdr req;
struct rephdr rep;
struct iphdr iphdr;
+ time_t curtime, lasterr;
daemonize = 1;
ttl = 3600;
daemonize = 1;
ttl = 3600;
openlog("icmpdnd", LOG_PID, LOG_DAEMON);
alive = 1;
openlog("icmpdnd", LOG_PID, LOG_DAEMON);
alive = 1;
while(alive) {
namelen = sizeof(name);
ret = recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&name, &namelen);
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");
if(ret < 0) {
if(errno == EINTR)
continue;
syslog(LOG_ERR, "error in receiving datagram: %m");
+ 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));
if(ret < sizeof(iphdr) + sizeof(req))
continue;
memcpy(&iphdr, buf, sizeof(iphdr));