use inet_ntop and inet_pton musl implementations on all platforms
This commit is contained in:
		@@ -124,147 +124,160 @@ namespace ix
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace ix
 | 
					    //
 | 
				
			||||||
 | 
					    // mingw does not have inet_ntop, which were taken as is from the musl C library.
 | 
				
			||||||
//
 | 
					    //
 | 
				
			||||||
// mingw does not have inet_ntop and inet_pton, which were taken as is from the musl C library.
 | 
					    const char* inet_ntop(int af, const void* a0, char* s, socklen_t l)
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
#if defined(_WIN32) && defined(__GNUC__)
 | 
					 | 
				
			||||||
const char* inet_ntop(int af, const void* a0, char* s, socklen_t l)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    const unsigned char* a = (const unsigned char*) a0;
 | 
					 | 
				
			||||||
    int i, j, max, best;
 | 
					 | 
				
			||||||
    char buf[100];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    switch (af)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        case AF_INET:
 | 
					// wrapper enabled on all platforms for now
 | 
				
			||||||
            if (snprintf(s, l, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]) < l) return s;
 | 
					// #if defined(_WIN32) && defined(__GNUC__)
 | 
				
			||||||
            break;
 | 
					#if 1
 | 
				
			||||||
        case AF_INET6:
 | 
					        const unsigned char* a = (const unsigned char*) a0;
 | 
				
			||||||
            if (memcmp(a, "\0\0\0\0\0\0\0\0\0\0\377\377", 12))
 | 
					        int i, j, max, best;
 | 
				
			||||||
                snprintf(buf,
 | 
					        char buf[100];
 | 
				
			||||||
                         sizeof buf,
 | 
					 | 
				
			||||||
                         "%x:%x:%x:%x:%x:%x:%x:%x",
 | 
					 | 
				
			||||||
                         256 * a[0] + a[1],
 | 
					 | 
				
			||||||
                         256 * a[2] + a[3],
 | 
					 | 
				
			||||||
                         256 * a[4] + a[5],
 | 
					 | 
				
			||||||
                         256 * a[6] + a[7],
 | 
					 | 
				
			||||||
                         256 * a[8] + a[9],
 | 
					 | 
				
			||||||
                         256 * a[10] + a[11],
 | 
					 | 
				
			||||||
                         256 * a[12] + a[13],
 | 
					 | 
				
			||||||
                         256 * a[14] + a[15]);
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
                snprintf(buf,
 | 
					 | 
				
			||||||
                         sizeof buf,
 | 
					 | 
				
			||||||
                         "%x:%x:%x:%x:%x:%x:%d.%d.%d.%d",
 | 
					 | 
				
			||||||
                         256 * a[0] + a[1],
 | 
					 | 
				
			||||||
                         256 * a[2] + a[3],
 | 
					 | 
				
			||||||
                         256 * a[4] + a[5],
 | 
					 | 
				
			||||||
                         256 * a[6] + a[7],
 | 
					 | 
				
			||||||
                         256 * a[8] + a[9],
 | 
					 | 
				
			||||||
                         256 * a[10] + a[11],
 | 
					 | 
				
			||||||
                         a[12],
 | 
					 | 
				
			||||||
                         a[13],
 | 
					 | 
				
			||||||
                         a[14],
 | 
					 | 
				
			||||||
                         a[15]);
 | 
					 | 
				
			||||||
            /* Replace longest /(^0|:)[:0]{2,}/ with "::" */
 | 
					 | 
				
			||||||
            for (i = best = 0, max = 2; buf[i]; i++)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (i && buf[i] != ':') continue;
 | 
					 | 
				
			||||||
                j = strspn(buf + i, ":0");
 | 
					 | 
				
			||||||
                if (j > max) best = i, max = j;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (max > 3)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                buf[best] = buf[best + 1] = ':';
 | 
					 | 
				
			||||||
                memmove(buf + best + 2, buf + best + max, i - best - max + 1);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (strlen(buf) < l)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                strcpy(s, buf);
 | 
					 | 
				
			||||||
                return s;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        default: errno = EAFNOSUPPORT; return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    errno = ENOSPC;
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int hexval(unsigned c)
 | 
					        switch (af)
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (c - '0' < 10) return c - '0';
 | 
					 | 
				
			||||||
    c |= 32;
 | 
					 | 
				
			||||||
    if (c - 'a' < 6) return c - 'a' + 10;
 | 
					 | 
				
			||||||
    return -1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int inet_pton(int af, const char* s, void* a0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    uint16_t ip[8];
 | 
					 | 
				
			||||||
    unsigned char* a = (unsigned char*) a0;
 | 
					 | 
				
			||||||
    int i, j, v, d, brk = -1, need_v4 = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (af == AF_INET)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        for (i = 0; i < 4; i++)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            for (v = j = 0; j < 3 && isdigit(s[j]); j++)
 | 
					            case AF_INET:
 | 
				
			||||||
                v = 10 * v + s[j] - '0';
 | 
					                if (snprintf(s, l, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]) < l) return s;
 | 
				
			||||||
            if (j == 0 || (j > 1 && s[0] == '0') || v > 255) return 0;
 | 
					                break;
 | 
				
			||||||
            a[i] = v;
 | 
					            case AF_INET6:
 | 
				
			||||||
            if (s[j] == 0 && i == 3) return 1;
 | 
					                if (memcmp(a, "\0\0\0\0\0\0\0\0\0\0\377\377", 12))
 | 
				
			||||||
            if (s[j] != '.') return 0;
 | 
					                    snprintf(buf,
 | 
				
			||||||
            s += j + 1;
 | 
					                             sizeof buf,
 | 
				
			||||||
 | 
					                             "%x:%x:%x:%x:%x:%x:%x:%x",
 | 
				
			||||||
 | 
					                             256 * a[0] + a[1],
 | 
				
			||||||
 | 
					                             256 * a[2] + a[3],
 | 
				
			||||||
 | 
					                             256 * a[4] + a[5],
 | 
				
			||||||
 | 
					                             256 * a[6] + a[7],
 | 
				
			||||||
 | 
					                             256 * a[8] + a[9],
 | 
				
			||||||
 | 
					                             256 * a[10] + a[11],
 | 
				
			||||||
 | 
					                             256 * a[12] + a[13],
 | 
				
			||||||
 | 
					                             256 * a[14] + a[15]);
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    snprintf(buf,
 | 
				
			||||||
 | 
					                             sizeof buf,
 | 
				
			||||||
 | 
					                             "%x:%x:%x:%x:%x:%x:%d.%d.%d.%d",
 | 
				
			||||||
 | 
					                             256 * a[0] + a[1],
 | 
				
			||||||
 | 
					                             256 * a[2] + a[3],
 | 
				
			||||||
 | 
					                             256 * a[4] + a[5],
 | 
				
			||||||
 | 
					                             256 * a[6] + a[7],
 | 
				
			||||||
 | 
					                             256 * a[8] + a[9],
 | 
				
			||||||
 | 
					                             256 * a[10] + a[11],
 | 
				
			||||||
 | 
					                             a[12],
 | 
				
			||||||
 | 
					                             a[13],
 | 
				
			||||||
 | 
					                             a[14],
 | 
				
			||||||
 | 
					                             a[15]);
 | 
				
			||||||
 | 
					                /* Replace longest /(^0|:)[:0]{2,}/ with "::" */
 | 
				
			||||||
 | 
					                for (i = best = 0, max = 2; buf[i]; i++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (i && buf[i] != ':') continue;
 | 
				
			||||||
 | 
					                    j = strspn(buf + i, ":0");
 | 
				
			||||||
 | 
					                    if (j > max) best = i, max = j;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (max > 3)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    buf[best] = buf[best + 1] = ':';
 | 
				
			||||||
 | 
					                    memmove(buf + best + 2, buf + best + max, i - best - max + 1);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (strlen(buf) < l)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    strcpy(s, buf);
 | 
				
			||||||
 | 
					                    return s;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            default: errno = EAFNOSUPPORT; return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        errno = ENOSPC;
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        return ::inet_ntop(af, a0, s, l);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (af != AF_INET6)
 | 
					
 | 
				
			||||||
 | 
					    static int hexval(unsigned c)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        errno = EAFNOSUPPORT;
 | 
					        if (c - '0' < 10) return c - '0';
 | 
				
			||||||
 | 
					        c |= 32;
 | 
				
			||||||
 | 
					        if (c - 'a' < 6) return c - 'a' + 10;
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (*s == ':' && *++s != ':') return 0;
 | 
					    //
 | 
				
			||||||
 | 
					    // mingw does not have inet_pton, which were taken as is from the musl C library.
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    int inet_pton(int af, const char* s, void* a0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					// wrapper enabled on all platforms for now
 | 
				
			||||||
 | 
					// #if defined(_WIN32) && defined(__GNUC__)
 | 
				
			||||||
 | 
					#if 1
 | 
				
			||||||
 | 
					        uint16_t ip[8];
 | 
				
			||||||
 | 
					        unsigned char* a = (unsigned char*) a0;
 | 
				
			||||||
 | 
					        int i, j, v, d, brk = -1, need_v4 = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0;; i++)
 | 
					        if (af == AF_INET)
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if (s[0] == ':' && brk < 0)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            brk = i;
 | 
					            for (i = 0; i < 4; i++)
 | 
				
			||||||
            ip[i & 7] = 0;
 | 
					            {
 | 
				
			||||||
            if (!*++s) break;
 | 
					                for (v = j = 0; j < 3 && isdigit(s[j]); j++)
 | 
				
			||||||
 | 
					                    v = 10 * v + s[j] - '0';
 | 
				
			||||||
 | 
					                if (j == 0 || (j > 1 && s[0] == '0') || v > 255) return 0;
 | 
				
			||||||
 | 
					                a[i] = v;
 | 
				
			||||||
 | 
					                if (s[j] == 0 && i == 3) return 1;
 | 
				
			||||||
 | 
					                if (s[j] != '.') return 0;
 | 
				
			||||||
 | 
					                s += j + 1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (af != AF_INET6)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            errno = EAFNOSUPPORT;
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (*s == ':' && *++s != ':') return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (i = 0;; i++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (s[0] == ':' && brk < 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                brk = i;
 | 
				
			||||||
 | 
					                ip[i & 7] = 0;
 | 
				
			||||||
 | 
					                if (!*++s) break;
 | 
				
			||||||
 | 
					                if (i == 7) return 0;
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            for (v = j = 0; j < 4 && (d = hexval(s[j])) >= 0; j++)
 | 
				
			||||||
 | 
					                v = 16 * v + d;
 | 
				
			||||||
 | 
					            if (j == 0) return 0;
 | 
				
			||||||
 | 
					            ip[i & 7] = v;
 | 
				
			||||||
 | 
					            if (!s[j] && (brk >= 0 || i == 7)) break;
 | 
				
			||||||
            if (i == 7) return 0;
 | 
					            if (i == 7) return 0;
 | 
				
			||||||
            continue;
 | 
					            if (s[j] != ':')
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (s[j] != '.' || (i < 6 && brk < 0)) return 0;
 | 
				
			||||||
 | 
					                need_v4 = 1;
 | 
				
			||||||
 | 
					                i++;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            s += j + 1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for (v = j = 0; j < 4 && (d = hexval(s[j])) >= 0; j++)
 | 
					        if (brk >= 0)
 | 
				
			||||||
            v = 16 * v + d;
 | 
					 | 
				
			||||||
        if (j == 0) return 0;
 | 
					 | 
				
			||||||
        ip[i & 7] = v;
 | 
					 | 
				
			||||||
        if (!s[j] && (brk >= 0 || i == 7)) break;
 | 
					 | 
				
			||||||
        if (i == 7) return 0;
 | 
					 | 
				
			||||||
        if (s[j] != ':')
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (s[j] != '.' || (i < 6 && brk < 0)) return 0;
 | 
					            memmove(ip + brk + 7 - i, ip + brk, 2 * (i + 1 - brk));
 | 
				
			||||||
            need_v4 = 1;
 | 
					            for (j = 0; j < 7 - i; j++)
 | 
				
			||||||
            i++;
 | 
					                ip[brk + j] = 0;
 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        s += j + 1;
 | 
					        for (j = 0; j < 8; j++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            *a++ = ip[j] >> 8;
 | 
				
			||||||
 | 
					            *a++ = ip[j];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (need_v4 && inet_pton(AF_INET, (const char*) s, a - 4) <= 0) return 0;
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        return ::inet_pton(af, s, a0);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (brk >= 0)
 | 
					
 | 
				
			||||||
    {
 | 
					} // namespace ix
 | 
				
			||||||
        memmove(ip + brk + 7 - i, ip + brk, 2 * (i + 1 - brk));
 | 
					 | 
				
			||||||
        for (j = 0; j < 7 - i; j++)
 | 
					 | 
				
			||||||
            ip[brk + j] = 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    for (j = 0; j < 8; j++)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        *a++ = ip[j] >> 8;
 | 
					 | 
				
			||||||
        *a++ = ip[j];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (need_v4 && inet_pton(AF_INET, (const char*) s, a - 4) <= 0) return 0;
 | 
					 | 
				
			||||||
    return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif // defined(_WIN32) && defined(__GNUC__)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,12 +53,6 @@ struct pollfd
 | 
				
			|||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// mingw does not have those
 | 
					 | 
				
			||||||
#if defined(_WIN32) && defined(__GNUC__)
 | 
					 | 
				
			||||||
const char* inet_ntop(int af, const void* src, char* dst, socklen_t size);
 | 
					 | 
				
			||||||
int inet_pton(int af, const char* src, void* dst);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace ix
 | 
					namespace ix
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
@@ -71,4 +65,7 @@ namespace ix
 | 
				
			|||||||
    bool uninitNetSystem();
 | 
					    bool uninitNetSystem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int poll(struct pollfd* fds, nfds_t nfds, int timeout);
 | 
					    int poll(struct pollfd* fds, nfds_t nfds, int timeout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const char* inet_ntop(int af, const void* src, char* dst, socklen_t size);
 | 
				
			||||||
 | 
					    int inet_pton(int af, const char* src, void* dst);
 | 
				
			||||||
} // namespace ix
 | 
					} // namespace ix
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,7 +104,7 @@ namespace ix
 | 
				
			|||||||
            server.sin_family = _addressFamily;
 | 
					            server.sin_family = _addressFamily;
 | 
				
			||||||
            server.sin_port = htons(_port);
 | 
					            server.sin_port = htons(_port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (inet_pton(_addressFamily, _host.c_str(), &server.sin_addr.s_addr) <= 0)
 | 
					            if (ix::inet_pton(_addressFamily, _host.c_str(), &server.sin_addr.s_addr) <= 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                std::stringstream ss;
 | 
					                std::stringstream ss;
 | 
				
			||||||
                ss << "SocketServer::listen() error calling inet_pton "
 | 
					                ss << "SocketServer::listen() error calling inet_pton "
 | 
				
			||||||
@@ -133,7 +133,7 @@ namespace ix
 | 
				
			|||||||
            server.sin6_family = _addressFamily;
 | 
					            server.sin6_family = _addressFamily;
 | 
				
			||||||
            server.sin6_port = htons(_port);
 | 
					            server.sin6_port = htons(_port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (inet_pton(_addressFamily, _host.c_str(), &server.sin6_addr) <= 0)
 | 
					            if (ix::inet_pton(_addressFamily, _host.c_str(), &server.sin6_addr) <= 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                std::stringstream ss;
 | 
					                std::stringstream ss;
 | 
				
			||||||
                ss << "SocketServer::listen() error calling inet_pton "
 | 
					                ss << "SocketServer::listen() error calling inet_pton "
 | 
				
			||||||
@@ -338,7 +338,7 @@ namespace ix
 | 
				
			|||||||
            if (_addressFamily == AF_INET)
 | 
					            if (_addressFamily == AF_INET)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                char remoteIp4[INET_ADDRSTRLEN];
 | 
					                char remoteIp4[INET_ADDRSTRLEN];
 | 
				
			||||||
                if (inet_ntop(AF_INET, &client.sin_addr, remoteIp4, INET_ADDRSTRLEN) == nullptr)
 | 
					                if (ix::inet_ntop(AF_INET, &client.sin_addr, remoteIp4, INET_ADDRSTRLEN) == nullptr)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    int err = Socket::getErrno();
 | 
					                    int err = Socket::getErrno();
 | 
				
			||||||
                    std::stringstream ss;
 | 
					                    std::stringstream ss;
 | 
				
			||||||
@@ -357,7 +357,7 @@ namespace ix
 | 
				
			|||||||
            else // AF_INET6
 | 
					            else // AF_INET6
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                char remoteIp6[INET6_ADDRSTRLEN];
 | 
					                char remoteIp6[INET6_ADDRSTRLEN];
 | 
				
			||||||
                if (inet_ntop(AF_INET6, &client.sin_addr, remoteIp6, INET6_ADDRSTRLEN) == nullptr)
 | 
					                if (ix::inet_ntop(AF_INET6, &client.sin_addr, remoteIp6, INET6_ADDRSTRLEN) == nullptr)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    int err = Socket::getErrno();
 | 
					                    int err = Socket::getErrno();
 | 
				
			||||||
                    std::stringstream ss;
 | 
					                    std::stringstream ss;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -906,7 +906,7 @@ namespace ix
 | 
				
			|||||||
        // code which display correct results
 | 
					        // code which display correct results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        char str[INET_ADDRSTRLEN];
 | 
					        char str[INET_ADDRSTRLEN];
 | 
				
			||||||
        inet_ntop(AF_INET, &addr, str, INET_ADDRSTRLEN);
 | 
					        ix::inet_ntop(AF_INET, &addr, str, INET_ADDRSTRLEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        spdlog::info("host: {} ip: {}", hostname, str);
 | 
					        spdlog::info("host: {} ip: {}", hostname, str);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user