aboutsummaryrefslogtreecommitdiff
path: root/socket_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'socket_server.h')
-rwxr-xr-xsocket_server.h57
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