Design your own client struct to store the information that you need for each client - including a buffer to hold the partial reads, username and their socket fd. Since there is no upper limit to the number of clients, use a linked list data structure to store the client records.