--- libaitio/inc/aitio.h 2013/08/13 00:17:28 1.34 +++ libaitio/inc/aitio.h 2013/09/02 11:16:27 1.35 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.34 2013/08/13 00:17:28 misho Exp $ +* $Id: aitio.h,v 1.35 2013/09/02 11:16:27 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -72,17 +72,36 @@ SUCH DAMAGE. #define IO_SOCK_ROLE_SERVER 1 +typedef struct tagCliSock sock_cli_t; +typedef void *(*sock_cb_t)(sock_cli_t*); +struct tagCliSock { + void *cli_parent; + pthread_t cli_tid; + int cli_fd; + int cli_pty; + sockaddr_t cli_addr; + char cli_name[64]; + + sock_cb_t cli_func; + void *cli_arg; + + ait_val_t cli_buf; + + TAILQ_ENTRY(tagCliSock) cli_node; +}; typedef struct { - int sock_role; - int sock_backq; - int sock_type; - int sock_proto; - int sock_fd; - sockaddr_t sock_addr; + int sock_role; + int sock_backq; + int sock_type; + int sock_proto; + int sock_fd; + sockaddr_t sock_addr; + sockaddr_t sock_peer; - sockaddr_t sock_peer; + ait_val_t sock_buf; - ait_val_t sock_buf; + pthread_mutex_t sock_mtx; + TAILQ_HEAD(, tagCliSock) sock_cli; } sock_t; @@ -120,6 +139,15 @@ void ioCloseSocket(sock_t ** __restrict s); * return: -1 error or 0 ok */ int ioUpSocket(sock_t * __restrict s, void *arg); +/* + * ioAcceptSocket() - Accept clients + * + * @s = Socket + * @f = callback function for client handling + * @arg = optional argument for callback function + * return: -1 error or 0 ok + */ +int ioAcceptSocket(sock_t * __restrict s, sock_cb_t f, void *arg); /* * ioPromptRead() - Read data from input h[0] with prompt to output h[1]