Why is my code running check_and_add_user even when the client already exist?
if (FD_ISSET(listen_soc, &listen_fds)) {
    client_fd = accept_connection(listen_soc, client_list);
    printf("main (test) client fd: %d\n", client_fd);
    if (client_fd == -1) {
        perror("accept");
        return -1;
    }
    printf("clinet_fd: %d\n", client_fd);
    printf("max_fd: %d\n", max_fd);

    Client *client_ptr = find_client(client_fd, client_list);

    if (client_ptr != NULL) {
        printf("client found\n");
    }
    if (client_ptr == NULL) {
        printf("main _ new connection\n");
        write(client_fd, "What is your user name?\n", 24);
        User *user = check_and_add_user(user_list, client_fd);

        Client *new_client = (Client *)malloc(sizeof(Client));
        new_client->fd = client_fd;
        new_client->user = user;
        new_client->username = user->name;
        new_client->next = NULL;
        if (client_list == NULL) {
            client_list = new_client;
        } else {
            Client *temp_client = client_list;
            while (temp_client->next != NULL) {
                temp_client = temp_client->next;
            }
            temp_client->next = new_client;
        }

    } else {
        cleanup_args_for_processing(user_list, client_fd, client_list);
    }