#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;
}