Распространенным способом работы многопоточных серверов является создание нового потока сразу после принятия нового соединения и передачи нового сокета этому потоку. Примерно так:
int main(int argc, char *argv[])
{
/* ... */
int client_socket = accept(server_socket);
pthread_create(&thread, NULL, my_connection_handler, (void *) client_socket);
/* ... */
}
void *my_connection_handler(void *argp)
{
int socket = (int) argp;
write(socket, "Hello!\r\n", 8);
close(socket);
return NULL;
}