/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "error/error.h" typedef struct serverclient_s serverclient_t; typedef struct serverclientaccept_s serverclientaccept_t; typedef struct { int32_t socket; } networkedserverclientaccept_t; typedef struct { int32_t socket; pthread_t readThread; pthread_t writeThread; struct timeval timeout; pthread_mutex_t readLock; pthread_mutex_t writeLock; } networkedserverclient_t; /** * Accepts an incoming connection from a networked server client. * * @param client Pointer to the server client structure. * @param accept Accept structure containing client information. * @return Error code indicating success or failure. */ errorret_t networkedServerClientAccept( serverclient_t *client, const serverclientaccept_t accept ); /** * Closes the connection to a networked server client. Waits for the thread to finish. * * @param client Pointer to the server client structure. */ void networkedServerClientClose(serverclient_t *client); /** * Closes the connection to a networked server client on the thread. * * @param client Pointer to the server client structure. * @param reason Reason for closing the connection. */ void networkedServerClientCloseOnThread( serverclient_t *client, const char_t *reason ); /** * Receives data from a server client. * * @param client Pointer to the server client structure. * @param buffer Pointer to the buffer to store received data. * @param len Max length of the buffer. * @return Number of bytes received. 0 or less indicates an error. */ ssize_t networkedServerClientRead( const serverclient_t * client, uint8_t *buffer, const size_t len ); /** * Writes data to a server client. * * @param client Pointer to the server client structure. * @param data Pointer to the data to send. * @param len Length of the data to send. * @return Error code indicating success or failure. */ errorret_t networkedServerClientWrite( serverclient_t * client, const uint8_t *data, const size_t len ); /** * Writes a packet to a server client. * * @param client Pointer to the server client structure. * @param packet Pointer to the packet to send. * @return Error code indicating success or failure. */ errorret_t networkedServerClientWritePacket( serverclient_t * client, const packet_t *packet ); /** * Thread function for handling reading from a networked server client. * * @param arg Pointer to the server client structure. * @return NULL. */ void * networkedServerClientReadThread(void *arg); /** * Thread function for handling writing to a networked server client. * * @param arg Pointer to the server client structure. * @return NULL. */ void * networkedServerClientWriteThread(void *arg);