socket: IP addressing, UDP and TCP connections

Data types

ip4_t

Packed IPv4 address.

addr4_t

Packed IPv4 address with port.

ip6_t

Packed IPv6 address.

addr6_t

Packed IPv6 address with port.

socket_t

Container for any IPv4 or IPv6 socket.

Variables

const ip4_t ip4loopback

Packed IPv4 loopback address.

const ip4_t ip4any

Packet IPv4 INADDR_ANY address.

const uint8_t ip6mappedv4prefix[12]

Packed IPv6 mapped IPv4 prefix.

const ip6_t ip6loopback

Packed IPv6 loopback address.

const ip6_t ip6any

Packet IPv6 INADDR_ANY address.

bool ip6disabled

Flag that indicates a disabled IPv6 stack. Set by the ip6* functions if detected.

API

int ip6resolve(ip6_t ip, const char *host)
socket_t *socket_new(uint8_t v, uint32_t scope_id)

Initialize a new socket_t struct.

socket_new4

Initialize a new socket_t struct for an IPv4 address.

socket_new6(scope_id)

Initialize a new socket_t struct for an IPv6 address.

void socket_free(socket_t *s)

Destroy a socket_t struct.

socket_free4

Alias for socket_free().

socket_free6

Alias for socket_free().

socket_t *socket_tcp4(void)
socket_t *socket_tcp6(uint32_t scope_id)
socket_t *socket_udp4(void)
socket_t *socket_udp6(uint32_t scope_id)
int socket_bind(socket_t *s, const ip6_t ip, uint16_t port)
int socket_close(socket_t *s)
int socket_connect(socket_t *s, const ip6_t ip, uint16_t port)
bool socket_connected(socket_t *s)
int socket_listen(socket_t *s, unsigned int backlog)
ssize_t socket_read(socket_t *s, void *buf, size_t len)
ssize_t socket_recv(socket_t *s, void *buf, size_t len, ip6_t ip, uint16_t *port)
ssize_t socket_send(socket_t *s, const void *buf, size_t len, ip6_t ip, uint16_t port)
ssize_t socket_sendfile(socket_t *s, int in, off_t offset, size_t len)
int socket_sendfile_full(socket_t *s, int in, size_t len, size_t *out)
ssize_t socket_write(socket_t *s, const void *buf, size_t len)
int socket_set_blocking(socket_t *s, int v)
int socket_set_ipv6only(socket_t *s, int v)
int socket_set_nopipe(socket_t *s, int v)
int socket_set_reuseaddr(socket_t *s, int v)
int socket_set_reuseport(socket_t *s, int v)
isip4mapped(ip)

Macro to check if a given packed IP address is an IPv6 mapped IPv4 address.

CHECK_SOCKET(s)

Macro to check if a socket_t struct is initialized properly.