--- ../../dhcp-3.0rc10/common/socket.c Sat Sep 30 01:24:55 2000 +++ socket.c Fri Aug 24 10:21:44 2001 @@ -244,11 +244,29 @@ struct hardware *hto; { int result; + int s; + + log_debug ("socket::send_packet"); #ifdef IGNORE_HOSTUNREACH int retry = 0; do { #endif - result = sendto (interface -> wfdesc, (char *)raw, len, 0, + if (strcmp (interface->name, "fallback") == 0) + { + struct sockaddr_in name; + + s = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + name.sin_family = AF_INET; + name.sin_family = htons (67); + name.sin_addr = from; + + bind (s, (struct sockaddr *)&name, sizeof name); + } + else + s = interface->wfdesc; + + result = sendto (s, (char *)raw, len, 0, (struct sockaddr *)to, sizeof *to); #ifdef IGNORE_HOSTUNREACH } while (to -> sin_addr.s_addr == htonl (INADDR_BROADCAST) && @@ -263,6 +281,10 @@ log_error ("send_packet: please consult README file%s", " regarding broadcast address."); } + + if (strcmp (interface->name, "fallback") == 0) + close (s); + return result; } #endif /* USE_SOCKET_SEND || USE_SOCKET_FALLBACK */