#include #include #include #include uint32_t htonl(uint32_t hostlong) { return BAN::host_to_network_endian(hostlong); } uint16_t htons(uint16_t hostshort) { return BAN::host_to_network_endian(hostshort); } uint32_t ntohl(uint32_t netlong) { return BAN::host_to_network_endian(netlong); } uint16_t ntohs(uint16_t netshort) { return BAN::host_to_network_endian(netshort); } in_addr_t inet_addr(const char* cp) { uint32_t a, b, c, d, n; const int ret = sscanf(cp, "%i%n.%i%n.%i%n.%i%n", &a, &n, &b, &n, &c, &n, &d, &n ); if (ret < 1 || ret > 4 || cp[n] != '\0') return INADDR_NONE; if (ret == 1 && (a > 0xFFFFFFFF)) return INADDR_NONE; if (ret == 2 && (a > 0xFF || b > 0xFFFFFF)) return INADDR_NONE; if (ret == 3 && (a > 0xFF || b > 0xFF || c > 0xFFFF)) return INADDR_NONE; if (ret == 4 && (a > 0xFF || b > 0xFF || c > 0xFF || d > 0xFF)) return INADDR_NONE; uint32_t result = 0; result |= (ret == 1) ? a : a << 24; result |= (ret == 2) ? b : b << 16; result |= (ret == 3) ? c : c << 8; result |= (ret == 4) ? d : d << 0; return htonl(result); } char* inet_ntoa(struct in_addr in) { static char buffer[16]; uint32_t he = ntohl(in.s_addr); sprintf(buffer, "%u.%u.%u.%u", (he >> 24) & 0xFF, (he >> 16) & 0xFF, (he >> 8) & 0xFF, (he >> 0) & 0xFF ); return buffer; } const char* inet_ntop(int af, const void* __restrict src, char* __restrict dst, socklen_t size) { if (af == AF_INET) { if (size < INET_ADDRSTRLEN) { errno = ENOSPC; return nullptr; } uint32_t he = ntohl(reinterpret_cast(src)->s_addr); sprintf(dst, "%u.%u.%u.%u", (he >> 24) & 0xFF, (he >> 16) & 0xFF, (he >> 8) & 0xFF, (he >> 0) & 0xFF ); return dst; } errno = EAFNOSUPPORT; return nullptr; }