/**
* D header file for POSIX.
*
* Copyright: Copyright Sean Kelly 2005 - 2009.
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
* Authors: Sean Kelly
* Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
*/
/* Copyright Sean Kelly 2005 - 2009.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
module core.sys.posix.arpa.inet;
import core.sys.posix.config;
public import core.stdc.inttypes; // for uint32_t, uint16_t
public import core.sys.posix.sys.socket; // for socklen_t
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Posix):
extern (C) nothrow @nogc:
//
// Required
//
/*
NOTE: The following must must be defined in core.sys.posix.arpa.inet to break
a circular import: in_port_t, in_addr_t, struct in_addr, INET_ADDRSTRLEN.
in_port_t // from core.sys.posix.netinet.in_
in_addr_t // from core.sys.posix.netinet.in_
struct in_addr // from core.sys.posix.netinet.in_
INET_ADDRSTRLEN // from core.sys.posix.netinet.in_
uint32_t // from core.stdc.inttypes
uint16_t // from core.stdc.inttypes
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
// per spec: const char* inet_ntop(int, const void*, char*, socklen_t);
char* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
*/
version (CRuntime_Glibc)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (Darwin)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (FreeBSD)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (NetBSD)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (OpenBSD)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@safe pure extern (D)
{
version (BigEndian)
{
uint32_t htonl(uint32_t x) { return x; }
uint16_t htons(uint16_t x) { return x; }
}
else
{
import core.bitop : bswap, byteswap;
uint32_t htonl(uint32_t x) { return bswap(x); }
uint16_t htons(uint16_t x) { return byteswap(x); }
}
alias ntohl = htonl;
alias ntohs = htons;
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (DragonFlyBSD)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (Solaris)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (CRuntime_Bionic)
{
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@safe pure extern (D)
{
version (BigEndian)
{
uint32_t htonl(uint32_t x) { return x; }
uint16_t htons(uint16_t x) { return x; }
}
else
{
import core.bitop : bswap, byteswap;
uint32_t htonl(uint32_t x) { return bswap(x); }
uint16_t htons(uint16_t x) { return byteswap(x); }
}
alias ntohl = htonl;
alias ntohs = htons;
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, size_t);
int inet_pton(int, const scope char*, void*);
}
else version (CRuntime_Musl)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
else version (CRuntime_UClibc)
{
alias uint16_t in_port_t;
alias uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
}
@trusted pure
{
uint32_t htonl(uint32_t);
uint16_t htons(uint16_t);
uint32_t ntohl(uint32_t);
uint16_t ntohs(uint16_t);
}
in_addr_t inet_addr(const scope char*);
char* inet_ntoa(in_addr);
const(char)* inet_ntop(int, const scope void*, char*, socklen_t);
int inet_pton(int, const scope char*, void*);
}
/*
NOTE: The following must must be defined in core.sys.posix.arpa.inet to break
a circular import: INET6_ADDRSTRLEN.
INET6_ADDRSTRLEN // from core.sys.posix.netinet.in_
*/
enum INET_ADDRSTRLEN = 16;
enum INET6_ADDRSTRLEN = 46;