Macro

X_NETWORK_VERSION_MAJOR

#define X_NETWORK_VERSION_MAJOR 1
Macro

X_NETWORK_VERSION_MINOR

#define X_NETWORK_VERSION_MINOR 0
Macro

X_NETWORK_VERSION_PATCH

#define X_NETWORK_VERSION_PATCH 0
Typedef

XSocket

typedef SOCKET XSocket;
Typedef

socklen_t

typedef int32_t socklen_t;
Macro

INVALID_SOCKET

#define INVALID_SOCKET(-1)
Struct

XAddress

typedef struct XAddress XAddress;
Enum

XAddressFamily

typedef enum{
  X_NET_AF_IPV4=1,
  X_NET_AF_IPV6=2,
}XAddressFamily;
Enum

XSocketType

typedef enum{
  X_NET_SOCK_STREAM=1,
  X_NET_SOCK_DGRAM=2,
}XSocketType;
Struct

XNetAdapter

typedef struct{
  int8_t name[128];
}XNetAdapter;
Struct

XNetAdapterInfo

typedef struct{
  int8_t name[128];
  int8_t description[256];
  int8_t mac[18];
  int8_t ipv4[16];
  int8_t ipv6[46];
  uint64_t speed_bps;
  bool is_wireless;
  int32_t mtu;
  uint32_t ifindex;
}XNetAdapterInfo;
Function

x_net_init

Initialize the networking subsystem.

bool x_net_init(void);

Returns

True on success, false on failure.

Function

x_net_shutdown

Shut down the networking subsystem and release associated resources.

void x_net_shutdown(void);

Returns

Nothing.

Function

x_net_socket_is_valid

Check whether a socket handle represents a valid socket.

bool x_net_socket_is_valid(XSocket sock);

Parameters

XSocket sock
Socket handle to validate.

Returns

True if the socket is valid, false otherwise.

Function

x_net_close

Close a socket handle.

void x_net_close(XSocket sock);

Parameters

XSocket sock
Socket handle to close.

Returns

Nothing.

Function

x_net_set_nonblocking

Enable or disable non-blocking mode on a socket.

int32_t x_net_set_nonblocking(
 XSocket sock,
 int32_t nonblocking
);

Parameters

XSocket sock
Socket handle to configure.
int32_t nonblocking
Non-zero to enable non-blocking mode, 0 to disable it.

Returns

0 on success, or -1 on error.

Function

x_net_socket

Create a socket with the specified address family and socket type.

XSocket x_net_socket(
 XAddressFamily family,
 XSocketType type
);

Parameters

XAddressFamily family
Address family (e.g., IPv4/IPv6).
XSocketType type
Socket type (e.g., TCP/UDP).

Returns

New socket handle, or an invalid socket value on failure.

Function

x_net_socket_tcp4

Create an IPv4 TCP socket.

XSocket x_net_socket_tcp4(void);

Returns

New socket handle, or an invalid socket value on failure.

Function

x_net_socket_tcp6

Create an IPv6 TCP socket.

XSocket x_net_socket_tcp6(void);

Returns

New socket handle, or an invalid socket value on failure.

Function

x_net_socket_udp4

Create an IPv4 UDP socket.

XSocket x_net_socket_udp4(void);

Returns

New socket handle, or an invalid socket value on failure.

Function

x_net_socket_udp6

Create an IPv6 UDP socket.

XSocket x_net_socket_udp6(void);

Returns

New socket handle, or an invalid socket value on failure.

Function

x_net_bind

Bind a socket to a specific local address.

bool x_net_bind(
 XSocket sock,
 const XAddress *addr
);

Parameters

XSocket sock
Socket handle to bind.
const XAddress *addr
Local address to bind to.

Returns

True on success, false on failure.

Function

x_net_bind_any

Bind a socket to any local address of the given family and port.

bool x_net_bind_any(
 XSocket sock,
 XAddressFamily family,
 uint16_t port
);

Parameters

XSocket sock
Socket handle to bind.
XAddressFamily family
Address family to bind (e.g., IPv4/IPv6).
uint16_t port
Local port to bind to.

Returns

True on success, false on failure.

Function

x_net_bind_any_udp

Bind a UDP socket to any local IPv4 address (system-chosen port/address if applicable).

bool x_net_bind_any_udp(XSocket sock);

Parameters

XSocket sock
UDP socket handle to bind.

Returns

True on success, false on failure.

Function

x_net_bind_any_udp6

Bind a UDP socket to any local IPv6 address (system-chosen port/address if applicable).

bool x_net_bind_any_udp6(XSocket sock);

Parameters

XSocket sock
UDP socket handle to bind.

Returns

True on success, false on failure.

Function

x_net_listen

Mark a bound socket as listening for incoming connections.

bool x_net_listen(
 XSocket sock,
 int32_t backlog
);

Parameters

XSocket sock
Socket handle.
int32_t backlog
Maximum pending connection queue length.

Returns

True on success, false on failure.

Function

x_net_accept

Accept an incoming connection on a listening socket.

XSocket x_net_accept(
 XSocket sock,
 XAddress *out_addr
);

Parameters

XSocket sock
Listening socket handle.
XAddress *out_addr
Optional output address receiving the peer address (may be NULL if supported).

Returns

New connected socket handle, or an invalid socket value on failure.

Function

x_net_connect

Connect a socket to a remote address.

int32_t x_net_connect(
 XSocket sock,
 const XAddress *addr
);

Parameters

XSocket sock
Socket handle to connect.
const XAddress *addr
Remote address to connect to.

Returns

0 on success, -1 on error, or a platform-defined in-progress code for non-blocking sockets.

Function

x_net_send

Send data on a connected socket.

size_t x_net_send(
 XSocket sock,
 const void *buf,
 size_t len
);

Parameters

XSocket sock
Connected socket handle.
const void *buf
Data to send.
size_t len
Number of bytes to send.

Returns

Number of bytes sent (may be less than len), or 0 on error/connection closed depending on implementation.

Function

x_net_recv

Receive data from a connected socket.

size_t x_net_recv(
 XSocket sock,
 void *buf,
 size_t len
);

Parameters

XSocket sock
Connected socket handle.
void *buf
Output buffer to receive data.
size_t len
Maximum number of bytes to read.

Returns

Number of bytes received, or 0 on connection closed/error depending on implementation.

Function

x_net_sendto

Send data to a specific address (datagram sockets).

size_t x_net_sendto(
 XSocket sock,
 const void *buf,
 size_t len,
 const XAddress *addr
);

Parameters

XSocket sock
Socket handle.
const void *buf
Data to send.
size_t len
Number of bytes to send.
const XAddress *addr
Destination address.

Returns

Number of bytes sent, or 0 on error depending on implementation.

Function

x_net_recvfrom

Receive data from a socket and optionally retrieve the sender address.

size_t x_net_recvfrom(
 XSocket sock,
 void *buf,
 size_t len,
 XAddress *out_addr
);

Parameters

XSocket sock
Socket handle.
void *buf
Output buffer to receive data.
size_t len
Maximum number of bytes to read.
XAddress *out_addr
Output address receiving the sender address.

Returns

Number of bytes received, or 0 on error/no data depending on implementation.

Function

x_net_select

Wait for readability on multiple sockets.

int32_t x_net_select(
 XSocket *read_sockets,
 int32_t read_count,
 int32_t timeout_ms
);

Parameters

XSocket *read_sockets
Array of sockets to wait on for readability.
int32_t read_count
Number of sockets in read_sockets.
int32_t timeout_ms
Timeout in milliseconds (-1 for infinite, 0 for non-blocking poll).

Returns

Number of sockets ready for reading, 0 on timeout, or -1 on error.

Function

x_net_poll

Wait for specific events on a socket.

int32_t x_net_poll(
 XSocket sock,
 int32_t events,
 int32_t timeout_ms
);

Parameters

XSocket sock
Socket handle.
int32_t events
Bitmask of events to wait for (implementation-defined).
int32_t timeout_ms
Timeout in milliseconds (-1 for infinite, 0 for non-blocking poll).

Returns

Event bitmask of occurred events, 0 on timeout, or -1 on error.

Function

x_net_resolve

Resolve a host and service/port into a network address.

bool x_net_resolve(
 const int8_t *host,
 const int8_t *port,
 XAddressFamily family,
 XAddress *out_addr
);

Parameters

const int8_t *host
Hostname or address string.
const int8_t *port
Service name or port string.
XAddressFamily family
Address family to resolve (e.g., IPv4/IPv6/unspecified).
XAddress *out_addr
Output address receiving the resolved result.

Returns

True on success, false on failure.

Function

x_net_parse_ip

Parse an IP string into a raw binary address.

int32_t x_net_parse_ip(
 XAddressFamily family,
 const int8_t *ip,
 void *out_addr
);

Parameters

XAddressFamily family
Address family (IPv4 or IPv6).
const int8_t *ip
IP address string.
void *out_addr
Output buffer receiving the raw address bytes.

Returns

0 on success, or -1 on failure.

Function

x_net_format_address

Format an address as a human-readable string.

int32_t x_net_format_address(
 const XAddress *addr,
 char *out_str,
 int32_t maxlen
);

Parameters

const XAddress *addr
Address to format.
char *out_str
Output buffer receiving the formatted string.
int32_t maxlen
Size of out_str in bytes/chars.

Returns

Number of characters written (excluding terminator), or -1 on failure.

Function

x_net_address_clear

Clear an XAddress structure (set to zero).

void x_net_address_clear(XAddress *addr);

Parameters

XAddress *addr
Address structure to clear.

Returns

Nothing.

Function

x_net_address_any

Create an "any" address for binding on the given family and port.

void x_net_address_any(
 XAddress *out_addr,
 int32_t family,
 uint16_t port
);

Parameters

XAddress *out_addr
Output address to fill.
int32_t family
Address family (implementation expects a family code).
uint16_t port
Port to set.

Returns

Nothing.

Function

x_net_address_from_ip_port

Build an XAddress from an IP string and port.

int32_t x_net_address_from_ip_port(
 const int8_t *ip,
 uint16_t port,
 XAddress *out_addr
);

Parameters

const int8_t *ip
IP address string.
uint16_t port
Port number.
XAddress *out_addr
Output address to fill.

Returns

0 on success, or -1 on failure.

Function

x_net_address_equal

Compare two XAddress values for equality.

int32_t x_net_address_equal(
 const XAddress *a,
 const XAddress *b
);

Parameters

const XAddress *a
First address.
const XAddress *b
Second address.

Returns

Non-zero if equal, 0 if not equal.

Function

x_net_address_to_string

Convert an XAddress to a string representation (typically "IP:port").

int32_t x_net_address_to_string(
 const XAddress *addr,
 char *buf,
 int32_t buf_len
);

Parameters

const XAddress *addr
Address to format.
char *buf
Output buffer receiving the string.
int32_t buf_len
Size of buf in bytes/chars.

Returns

Number of characters written (excluding terminator), or -1 on failure.

Function

x_net_dns_resolve

Resolve a DNS hostname to an address.

int32_t x_net_dns_resolve(
 const int8_t *hostname,
 XAddressFamily family,
 XAddress *out_addr
);

Parameters

const int8_t *hostname
Hostname to resolve.
XAddressFamily family
Address family to resolve (e.g., IPv4/IPv6).
XAddress *out_addr
Output address receiving the resolved result.

Returns

0 on success, or -1 on failure.

Function

x_net_join_multicast_ipv4

Join an IPv4 multicast group by textual group address.

bool x_net_join_multicast_ipv4(
 XSocket sock,
 const int8_t *group
);

Parameters

XSocket sock
Socket handle.
const int8_t *group
Multicast group address string (e.g., "239.0.0.1").

Returns

True on success, false on failure.

Function

x_net_leave_multicast_ipv4

Leave an IPv4 multicast group by textual group address.

bool x_net_leave_multicast_ipv4(
 XSocket sock,
 const int8_t *group
);

Parameters

XSocket sock
Socket handle.
const int8_t *group
Multicast group address string.

Returns

True on success, false on failure.

Function

x_net_join_multicast_ipv6

Join an IPv6 multicast group.

bool x_net_join_multicast_ipv6(
 XSocket sock,
 const int8_t *multicast_ip,
 uint32_t ifindex
);

Parameters

XSocket sock
Socket handle.
const int8_t *multicast_ip
Multicast group IPv6 address string.
uint32_t ifindex
Network interface index to join on.

Returns

True on success, false on failure.

Function

x_net_leave_multicast_ipv6

Leave an IPv6 multicast group.

bool x_net_leave_multicast_ipv6(
 XSocket sock,
 const int8_t *multicast_ip,
 uint32_t ifindex
);

Parameters

XSocket sock
Socket handle.
const int8_t *multicast_ip
Multicast group IPv6 address string.
uint32_t ifindex
Network interface index to leave on.

Returns

True on success, false on failure.

Function

x_net_join_multicast_ipv4_addr

Join an IPv4 multicast group using an XAddress structure.

bool x_net_join_multicast_ipv4_addr(
 XSocket sock,
 const XAddress *group_addr
);

Parameters

XSocket sock
Socket handle.
const XAddress *group_addr
Multicast group address.

Returns

True on success, false on failure.

Function

x_net_leave_multicast_ipv4_addr

Leave an IPv4 multicast group using an XAddress structure.

bool x_net_leave_multicast_ipv4_addr(
 XSocket sock,
 const XAddress *group_addr
);

Parameters

XSocket sock
Socket handle.
const XAddress *group_addr
Multicast group address.

Returns

True on success, false on failure.

Function

x_net_enable_broadcast

Enable or disable broadcast capability on a socket.

bool x_net_enable_broadcast(
 XSocket sock,
 bool enable
);

Parameters

XSocket sock
Socket handle.
bool enable
True to enable broadcast, false to disable.

Returns

True on success, false on failure.

Function

x_net_get_adapter_count

Get the number of network adapters available on the system.

int32_t x_net_get_adapter_count(void);

Returns

Number of adapters, or -1 on error.

Function

x_net_list_adapters

List available network adapters.

int32_t x_net_list_adapters(
 XNetAdapter *out_adapters,
 int32_t max_adapters
);

Parameters

XNetAdapter *out_adapters
Output array receiving adapter entries.
int32_t max_adapters
Maximum number of adapters to write to out_adapters.

Returns

Number of adapters written, or -1 on error.

Function

x_net_get_adapter_info

Retrieve detailed information about a network adapter by name.

bool x_net_get_adapter_info(
 const int8_t *name,
 XNetAdapterInfo *out_info
);

Parameters

const int8_t *name
Adapter name identifier.
XNetAdapterInfo *out_info
Output structure receiving detailed adapter information.

Returns

True on success, false on failure.

Function

x_net_get_last_error

Get the last network error code for the current thread/process.

int32_t x_net_get_last_error(void);

Returns

Last error code (WSAGetLastError() on Windows, errno on POSIX).

Function

x_net_get_last_error_message

Write a human-readable message for the last network error into a buffer.

int32_t x_net_get_last_error_message(
 char *buf,
 int32_t buf_len
);

Parameters

char *buf
Output buffer to receive the message string.
int32_t buf_len
Size of buf in bytes/chars.

Returns

0 on success, or -1 on failure (e.g., buffer too small).

Macro

X_NET_ALLOC

Internal macro for allocating memory. To override how this header allocates memory, define this macro with a different implementation before including this header.

#define X_NET_ALLOC(sz) malloc(sz)

Parameters

sz
The size of memory to alloc.
Macro

X_NET_FREE

Internal macro for freeing memory. To override how this header frees memory, define this macro with a different implementation before including this header.

#define X_NET_FREE(p) free(p)

Parameters

p
The address of memory region to free.
Macro

X_NET_POLLIN

#define X_NET_POLLIN 0x01
Macro

X_NET_POLLOUT

#define X_NET_POLLOUT 0x02
Function

x_net_get_adapter_count_win32

int32_t x_net_get_adapter_count_win32(void);
Function

x_net_list_adapters_win32

int32_t x_net_list_adapters_win32(
 XNetAdapter *out_adapters,
 int32_t max_adapters
);
Function

x_net_get_adapter_info_win32

int32_t x_net_get_adapter_info_win32(
 const int8_t *name,
 XNetAdapterInfo *out_info
);
Function

x_net_get_adapter_count_posix

int32_t x_net_get_adapter_count_posix(void);
Function

x_net_list_adapters_posix

int32_t x_net_list_adapters_posix(
 XNetAdapter *out_adapters,
 int32_t max_adapters
);
Function

x_net_get_adapter_info_posix

int32_t x_net_get_adapter_info_posix(
 const int8_t *name,
 XNetAdapterInfo *out_info
);