sock-udp (Socket UDP)

Header: udo/sock-udp.h

Table of contents (click to go)

Macros

Enums

Unions

Structs

  1. udo_sock_udp

  2. udo_sock_udp_server_create_info

  3. udo_sock_udp_client_create_info

Functions

  1. udo_sock_udp_server_create()

  2. udo_sock_udp_server_accept()

  3. udo_sock_udp_server_recv_data()

  4. udo_sock_udp_client_create()

  5. udo_sock_udp_client_connect()

  6. udo_sock_udp_client_send_data()

  7. udo_sock_udp_get_fd()

  8. udo_sock_udp_get_ip_addr()

  9. udo_sock_udp_get_port()

  10. udo_sock_udp_destroy()

  11. udo_sock_udp_get_sizeof()

  12. udo_sock_udp_recv_data()

  13. udo_sock_udp_send_data()

API Documentation

udo_sock_udp (private)

Structure defining UDO Socket UDP context.
struct udo_sock_udp
struct udo_log_error_struct err;
bool free;
int fd;
char ip_addr[INET6_ADDRSTRLEN];
int port;
struct sockaddr_in6 addr;
err
Stores information about the error that occured
for the given context and may later be retrieved
by caller.
free
If structure allocated with calloc(3) member will be
set to true so that, we know to call free(3) when
destroying the context.
fd
File descriptor to the open UDP socket
ip_addr
Textual network IP address to sendto(2)/recvfrom(2).
port
Network port number to sendto(2)/recvfrom(2) with.
addr
Stores IPV6 network byte information about the UDP socket context.
Is used for client connect(2) and server bind(2)/connect(2).

udo_sock_udp_server_create_info

Structure passed to udo_sock_udp_server_create()
used to define how to create the server.
struct udo_sock_udp_server_create_info
unsigned char ipv6 : 1;
const char *ip_addr;
int port;
ipv6
Boolean to determine if a socket is soley an ipv6
socket or requires an ipv4-mapped-ipv6-address.
ip_addr
Textual network IP address to recvfrom(2)/sendto(2) data with.
port
Network port to recvfrom(2)/sendto(2) data with.

udo_sock_udp_server_create

struct udo_sock_udp *udo_sock_udp_server_create(struct udo_sock_udp *sock, const void *sock_info);
Creates a socket that may be utilized for server socket operations.

Param

Decription

sock

May be NULL or a pointer to a struct udo_sock_udp.
If NULL memory will be allocated and return to
caller. If not NULL address passed will be used
to store the newly created struct udo_sock_udp
context.

sock_info

Implementation uses a pointer to a
Returns:
on success: Pointer to a struct udo_sock_udp
on failure: NULL

udo_sock_udp_server_accept

int udo_sock_udp_server_accept(struct udo_sock_udp *sock, const struct sockaddr_in6 *addr, const unsigned char ipv6);
Creates file descriptor that can filter for
addr data comming to server file descriptor.
Useful to utilize in an epoll(2) event loop
if caller wants to implement tcp like event
handling with UDP sockets.

Param

Decription

sock

Must pass a pointer to a struct udo_sock_udp.

addr

Must pass a pointer to a populated struct sockaddr_in6.

ipv6

Boolean determines if created socket is soley an ipv6
socket or requires an ipv4-mapped-ipv6-address.
Returns:
on success: Open file descriptor to filtered socket
on failure: -1

udo_sock_udp_server_recv_data

ssize_t udo_sock_udp_server_recv_data(struct udo_sock_udp *sock, void *data, const size_t size, struct sockaddr_in6 *addr, const void *sock_info);
Receive data from server socket file descriptor.

Param

Decription

sock

Pointer to a struct udo_sock_udp context.

data

Pointer to buffer to store data received from a socket.

size

Size of data to receive from a socket.

addr

Pointer to struct sockaddr_in6 which stores the
address information of the socket that data
was received from.

sock_info

Reserved for future usage. For now used
to set the flag argument of recvfrom(2).
Returns:
on success: Amount of bytes received
on failure: # < 0

udo_sock_udp_client_create_info

Structure passed to udo_sock_udp_client_create()
used to define how to create the client.
struct udo_sock_udp_client_create_info
unsigned char ipv6 : 1;
const char *ip_addr;
int port;
ipv6
Boolean to determine if a socket is soley an ipv6
socket or requires an ipv4-mapped-ipv6-address.
ip_addr
Textual network IP address to recvfrom(2)/sendto(2) data with.
port
Network port to recvfrom(2)/sendto(2) data with.

udo_sock_udp_client_create

struct udo_sock_udp *udo_sock_udp_client_create(struct udo_sock_udp *sock, const void *sock_info);
Creates a socket that may be utilized for client socket operations.

Param

Decription

sock

May be NULL or a pointer to a struct udo_sock_udp.
If NULL memory will be allocated and return to
caller. If not NULL address passed will be used
to store the newly created struct udo_sock_udp
context.

sock_info

Implementation uses a pointer to a
Returns:
on success: Pointer to a struct udo_sock_udp
on failure: NULL

udo_sock_udp_client_connect

int udo_sock_udp_client_connect(struct udo_sock_udp *sock);
Fliters client socket to allow sending data
without passing a struct sockaddr_in6 to sendto(2).
Address is populated with a call to udo_sock_udp_client_create().

Param

Decription

sock

Must pass a pointer to a struct udo_sock_udp.
Returns:
on success: 0
on failure: -1

udo_sock_udp_client_send_data

ssize_t udo_sock_udp_client_send_data(struct udo_sock_udp *sock, const void *data, const size_t size, const void *sock_info);
Send data to client socket address provided via

Param

Must pass a pointer to a struct udo_sock_udp.

data

Pointer to buffer to send through socket.

size

Size of data to send through socket.

sock_info

Reserved for future usage. For now used
to set the flag argument of sendto(2).
Returns:
on success: Amount of bytes sent
on failure: # < 0

udo_sock_udp_get_fd

int udo_sock_udp_get_fd(struct udo_sock_udp *sock);
Acquire socket file descriptor associated with
struct udo_sock_udp context.

Param

Decription

sock

Must pass a pointer to a struct udo_sock_udp.
Returns:
on success: UDP socket file descriptor
on failure: -1

udo_sock_udp_get_ip_addr

const char *udo_sock_udp_get_ip_addr(struct udo_sock_udp *sock);
Acquire textual network ip address associated
with struct udo_sock_udp context.

Param

Decription

sock

Must pass a pointer to a struct udo_sock_udp.
Returns:
on success: Textual network ip address
on failure: NULL

udo_sock_udp_get_port

int udo_sock_udp_get_port(struct udo_sock_udp *sock);
Acquire network port associated with
struct udo_sock_udp context.

Param

Decription

sock

Must pass a pointer to a struct udo_sock_udp.
Returns:
on success: Network port connected to context
on failure: -1

udo_sock_udp_destroy

void udo_sock_udp_destroy(struct udo_sock_udp *sock);
Frees any allocated memory and closes FD’s (if open) created after

Param

Decription

sock

Pointer to a valid struct udo_sock_udp.

udo_sock_udp_get_sizeof

int udo_sock_udp_get_sizeof(void);
Returns size of the internal structure. So,
if caller decides to allocate memory outside
of API interface they know the exact amount
of bytes.
Returns:
on success: sizeof(struct udo_sock_udp)
on failure: sizeof(struct udo_sock_udp)

udo_sock_udp_recv_data

ssize_t udo_sock_udp_recv_data(const int sock_fd, void *data, const size_t size, struct sockaddr_in6 *addr, const void *sock_info);
Receive data from socket file descriptor.

Param

Decription

sock_fd

Socket file descriptor to receive data from.

data

Pointer to buffer to store data received from a socket.

size

Size of data to receive from a socket.

addr

Pointer to struct sockaddr_in6 which stores the
address information of the socket that data
was received from.

sock_info

Reserved for future usage. For now used
to set the flag argument of recvfrom(2).
Returns:
on success: Amount of bytes received
on failure: # < 0

udo_sock_udp_send_data

ssize_t udo_sock_udp_send_data(const int sock_fd, const void *data, const size_t size, const struct sockaddr_in6 *addr, const void *sock_info);
Send data to socket file descriptor.

Param

Decription

sock_fd

Socket file descriptor to send data to.

data

Pointer to buffer to send through socket.

size

Size of data to send through socket.

addr

Pointer to struct sockaddr_in6 which stores the
address information of a socket that data
will be sent to.

sock_info

Reserved for future usage. For now used
to set the flag argument of sendto(2).
Returns:
on success: Amount of bytes sent
on failure: # < 0