aboutsummaryrefslogtreecommitdiff
path: root/Server.c
diff options
context:
space:
mode:
Diffstat (limited to 'Server.c')
-rwxr-xr-xServer.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/Server.c b/Server.c
new file mode 100755
index 0000000..3fb55c6
--- /dev/null
+++ b/Server.c
@@ -0,0 +1,44 @@
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <Server.h>
+
+struct Server server_constructor(int domain, int service, int protocol, ulong interface, int port, int backlog, pthread_t(*launch)(struct Server *server)){
+ struct Server server;
+
+ server.domain=domain;
+ server.service=service;
+ server.protocol=protocol;
+ server.interface=interface;
+ server.port=port;
+ server.backlog=backlog;
+
+ server.address.sin_family=domain;
+ server.address.sin_port=htons(port);
+ server.address.sin_addr.s_addr=htonl(interface);
+
+ server.socket = socket(domain,service,protocol);
+
+ if(server.socket == 0){
+ perror("failed to connect to socket...\n");
+ exit(1);
+ }
+
+ if (bind(server.socket, (struct sockaddr *)&server.address, sizeof(server.address)) < 0){
+ perror("failed to bind socket...\n");
+ exit(1);
+ }
+
+ if(listen(server.socket, server.backlog) < 0){
+ perror("failed to start listening...\n");
+ exit(1);
+ }
+
+ server.accepted_socket=NULL;
+
+ server.launch=launch;
+ server.running=true;
+
+ return server;
+};