diff options
Diffstat (limited to 'Server.c')
| -rwxr-xr-x | Server.c | 44 |
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; +}; |
