diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index 40d25a8b..d4e5435e 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -25,6 +25,7 @@ #else #include +#include #endif #ifdef LWS_OPENSSL_SUPPORT @@ -371,6 +372,7 @@ libwebsockets_get_peer_addresses(int fd, char *name, int name_len, char ip[128]; unsigned char *p; int n; + struct sockaddr_un *un; rip[0] = '\0'; name[0] = '\0'; @@ -400,11 +402,17 @@ libwebsockets_get_peer_addresses(int fd, char *name, int name_len, p = (unsigned char *)host1->h_addr_list[n++]; if (p == NULL) continue; - if (host1->h_addrtype != AF_INET) + if ((host1->h_addrtype != AF_INET) && + (host1->h_addrtype != AF_LOCAL)) continue; - sprintf(ip, "%u.%u.%u.%u", - p[0], p[1], p[2], p[3]); + if (host1->h_addrtype == AF_INET) + sprintf(ip, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); + else { + un = (struct sockaddr_un *)p; + strncpy(ip, un->sun_path, sizeof(ip) -1); + ip[sizeof(ip) - 1] = '\0'; + } p = NULL; strncpy(rip, ip, rip_len); rip[rip_len - 1] = '\0';