diff options
Diffstat (limited to 'socket_server.h')
| -rwxr-xr-x | socket_server.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/socket_server.h b/socket_server.h new file mode 100755 index 0000000..222de11 --- /dev/null +++ b/socket_server.h @@ -0,0 +1,57 @@ +#ifndef socket_server_h +#define socket_server_h +#include <unistd.h> +#include <pthread.h> +#include <netinet/in.h> +#include <stdio.h> +#include <sys/socket.h> +#include <poll.h> +#include <stdbool.h> +#include <string.h> +#include <pthread.h> +#include <stdatomic.h> + +struct AcceptedSocket{ + int socketFD; + struct sockaddr_in address; + int error; + bool succ; + pthread_t thread_id; + atomic_bool shutdown; + + struct AcceptedSocket *next; +}; + +struct Server{ + int domain; + int service; + int protocol; + u_long interface; + int port; + int backlog; + atomic_bool running; + + pthread_t server_thread_id; + pthread_t cleanup_thread_id; + + struct sockaddr_in address; + + int socket; + + pthread_rwlock_t list_lock; + struct AcceptedSocket *accepted_socket; + + void (*on_message)(struct Server *server, struct AcceptedSocket* cur_socket, char message[], ssize_t amountRecv); + void (*on_disconnect)(struct Server *server, struct AcceptedSocket* cur_socket); +}; + +struct Server server_constructor(int domain, int service, int protocol, u_long interface, int port, int backlog); + +int server_close_socket(struct Server *server); + +int init_socket_server(struct Server *server); + +void soc_send(struct Server* server, struct AcceptedSocket* cur_socket, char* message); + +void soc_broadcast(struct Server *server, struct AcceptedSocket* cur_socket, char* message); +#endif |
