#ifndef lint
static char copyright[] =
-"$Id: socket.c,v 1.21 1997/03/06 06:55:53 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
+"$Id: socket.c,v 1.22 1997/03/29 00:06:07 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
struct sockaddr_in *to;
struct hardware *hto;
{
- return sendto (interface -> wfdesc, (char *)raw, len, 0,
- (struct sockaddr *)to, sizeof *to);
+ int result;
+#ifdef IGNORE_HOSTUNREACH
+ int retry = 0;
+ do {
+#endif
+ result = sendto (interface -> wfdesc, (char *)raw, len, 0,
+ (struct sockaddr *)to, sizeof *to);
+#ifdef IGNORE_HOSTUNREACH
+ } while (to.sin_addr.s_addr = htonl (INADDR_BROADCAST) &&
+ result < 0 &&
+ (errno == EHOSTUNREACH ||
+ errno == ECONNREFUSED) &&
+ retry++ < 10);
+#endif
}
#endif /* USE_SOCKET_SEND */
struct hardware *hfrom;
{
int flen = sizeof *from;
+ int result;
- return recvfrom (interface -> rfdesc, buf, len, 0,
- (struct sockaddr *)from, &flen);
+#ifdef IGNORE_HOSTUNREACH
+ int retry = 0;
+ do {
+#endif
+ result = recvfrom (interface -> rfdesc, buf, len, 0,
+ (struct sockaddr *)from, &flen);
+#ifdef IGNORE_HOSTUNREACH
+ } while (result < 0 &&
+ (errno == EHOSTUNREACH ||
+ errno == ECONNREFUSED) &&
+ retry++ < 10);
+#endif
}
#endif /* USE_SOCKET_RECEIVE */