summaryrefslogtreecommitdiffstats
path: root/lib/net/client.c
blob: 30511d2a23658296d624165986bd030c5735a3fa (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
#include "./client.h"
#include "common.h"
#include <netinet/in.h>

conn_t* client_connect_to_server(const char* addr, const char* port) {
    conn_t* conn = calloc(1, sizeof(*conn));

    conn->conn_socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (conn->conn_socket_fd == -1) {
        fprintf(stderr, "[client_connect_to_server] Unable to create socket()\n");
        exit(EXIT_FAILURE);
    }

    struct sockaddr_in* conn_addr = get_addr(addr, port);

    if (connect(conn->conn_socket_fd, conn_addr, sizeof(*conn_addr)) == -1) {
        free(conn_addr);

        if (errno == ECONNREFUSED) {
            close(conn->conn_socket_fd);
            free(conn);

            return NULL;
        }

        fprintf(stderr, "[connect_to_master] Unable to connect() to master");
        exit(EXIT_FAILURE);
    }

    if (conn_configure_tcpalive(conn) == -1) {
        fprintf(stderr, "[client_connect_to_server] Unable to enable TCPALIVE\n");
        exit(EXIT_FAILURE);
    }

    free(conn_addr);

    return conn;
}