Why is everytime accept_connection updates new_usock always changes first_usock, and that first_usock and new_usock refer to the same thing?
while (1) {
    Usock new_usock;    // create a new Usock struct
    if (first_usock == NULL) {  // first client connection
        first_usock = &new_usock;
    } else {    // subsequent connections
        Usock *curr_usock = first_usock;
        while (curr_usock->next != NULL) {
            curr_usock = curr_usock->next;
            }
            curr_usock->next = &new_usock;
        }
            
    struct sockaddr_in client_addr;
    unsigned int client_len = sizeof(struct sockaddr_in);
    client_addr.sin_family = AF_INET;
    int client_socket = accept_connection(server_socket, &new_usock,
                                                  &client_addr, &client_len);
}