read an input from a socket. If the user does not have a username, then the input is its username. Else, echo the input back through the same file descriptor
int num_read = read(fd, &buf, BUF_SIZE);
    buf[num_read] = '\0';
    if(users[client_index].username == NULL)//we haven't set it yet 
    {
        users[client_index].username = malloc(num_read + 1);
        strncpy(users[client_index].username, buf, BUF_SIZE);
    } 
    char new_buf[BUF_SIZE + sizeof(users[client_index].username)];
    strcpy(strcat(new_buf, (char*)':'), users[client_index].username);
    strcpy(&(new_buf[sizeof(users[client_index].username) - 1]), buf);
    printf("message to write: %s", new_buf);
    
    if (num_read == 0 || write(fd, new_buf, strlen(new_buf)) != strlen(new_buf)) {
        users[client_index].sock_fd = -1;
        return fd;
    }
