- sin.sin6_addr = in6addr_any;
- } else {
- char bind_to[256];
- if ((strchr(ip_addr, '.')) && (!strchr(ip_addr, ':'))) { /* specific IPv4 */
- snprintf(bind_to, sizeof bind_to, "::ffff:%s", ip_addr);
- }
- else {
- safestrncpy(bind_to, ip_addr, sizeof bind_to); /* specific IPv6 */
+ ip_version = 6;
+ sin6.sin6_addr = in6addr_any;
+ }
+ else if (!strcmp(ip_addr, "0.0.0.0")) /* any IPv4 address */
+ {
+ ip_version = 4;
+ sin4.sin_addr.s_addr = INADDR_ANY;
+ }
+ else if ((strchr(ip_addr, '.')) && (!strchr(ip_addr, ':'))) /* specific IPv4 */
+ {
+ ip_version = 4;
+ if (inet_pton(AF_INET, ip_addr, &sin4.sin_addr) <= 0) {
+ lprintf(1, "Error binding to [%s] : %s\n", ip_addr, strerror(errno));
+ return (-WC_EXIT_BIND);