aboutsummaryrefslogtreecommitdiff
path: root/src/socket.c
blob: 99e44771ec4e4feae67b064debe8657cf7d32c69 (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
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <assert.h>

#include "socket.h"


int socket_init_in(psocket *psocket, const char *listen_addr, unsigned int listen_port)
{
    struct in_addr addr = {0};

    assert(psocket);
    if (!inet_aton(listen_addr, &addr))
        return 1;

    psocket->sock.sin_family = AF_INET;
    psocket->sock.sin_addr = addr;
    psocket->sock.sin_port = htons(listen_port);
    psocket->fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
    return psocket->fd < 0;
}

int socket_bind_listen(psocket *psocket)
{
    assert(psocket);
    if (bind(psocket->fd, &psocket->sock, sizeof(psocket->sock)) < 0)
        return 1;
    return listen(psocket->fd, POTD_BACKLOG) < 0;
}