aboutsummaryrefslogtreecommitdiff
path: root/Server.c
blob: 8c3c8c47c4d2d2fe601662f3805118a047ddd479 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#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){
    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.on_message=NULL;
    server.on_disconnect=NULL;

    server.running=true;

    return server;
};