# endif
/*
- * No "from", just use regular sendto.
+ * No "from" or "from" is 0.0.0.0 or ::/0, just use regular sendto.
*/
- if (!from || (from_len == 0)) return sendto(fd, buf, len, flags, to, to_len);
+ if (!from || (from_len == 0) ||
+ (from->sa_family == AF_INET &&
+ (((struct sockaddr_in *) from)->sin_addr.s_addr == INADDR_ANY)) ||
+ (from->sa_family == AF_INET6 &&
+ IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *) from)->sin6_addr))
+ )
+ return sendto(fd, buf, len, flags, to, to_len);
/* Set up control buffer iov and msgh structures. */
memset(&cbuf, 0, sizeof(cbuf));