diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index d3eb9c12..475162b7 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -2164,8 +2164,13 @@ libwebsocket_create_context(struct lws_context_creation_info *info) if (info->iface == NULL) serv_addr.sin_addr.s_addr = INADDR_ANY; else - interface_to_sa(info->iface, &serv_addr, - sizeof(serv_addr)); + if (interface_to_sa(info->iface, &serv_addr, + sizeof(serv_addr)) < 0) { + lwsl_err("Unable to find interface %s\n", + info->iface); + compatible_close(sockfd); + goto bail; + } serv_addr.sin_port = htons(info->port); n = bind(sockfd, (struct sockaddr *) &serv_addr, diff --git a/lib/server.c b/lib/server.c index 44145cb5..bc8b497f 100644 --- a/lib/server.c +++ b/lib/server.c @@ -63,11 +63,12 @@ interface_to_sa(const char *ifname, struct sockaddr_in *addr, size_t addrlen) struct sockaddr_in *sin; getifaddrs(&ifr); - for (ifc = ifr; ifc != NULL; ifc = ifc->ifa_next) { - if (strcmp(ifc->ifa_name, ifname)) - continue; + for (ifc = ifr; ifc != NULL && rc; ifc = ifc->ifa_next) { if (ifc->ifa_addr == NULL) continue; + lwsl_info(" interface %s vs %s\n", ifc->ifa_name, ifname); + if (strcmp(ifc->ifa_name, ifname)) + continue; sin = (struct sockaddr_in *)ifc->ifa_addr; if (sin->sin_family != AF_INET) continue;