Les Sockets et les threads à l'aide de C

Je suis nouveau à deux sockets et les threads. J'ai ce code:

listen(socket_fd, 20);

/* Looooop */
  while (1) {
    newsocket_fd = accept(socket_fd, 
                          (struct sockaddr *) &client_addr, 
                          &client_len);
    if (newsocket_fd < 0) {
      error("ERROR on accept");
    }
    pthread_t thread;
    pthread_create(&thread, NULL, run_thread, (void *) newsocket_fd);
    pthread_join(thread, NULL);
  }

Comment puis-je commencer un nouveau thread pour chaque nouvelle connexion, plutôt que pour chaque demande? Ces fils doivent être démarré lors d'une nouvelle connexion, et ces fils de faut ensuite attendre les demandes, de gérer ces demandes, et enfin de retour lorsque la connexion est fermée. Il devrait y avoir un thread pour chaque connexion. Voici le code pour run_thread:

void
*run_thread(void *ptr) {
  char buffer[256];
  bzero(buffer, 256);
  int n;
  n = read((int) ptr, buffer, 255);
  if (n < 0) error("ERROR Reading from socket");
  printf("%s\n\n**********\n\n", buffer);

  /* Parse buffer and return result */
  char *result;
  {
    /* First, determine command, 4 characters */
    /* (much code) */
  }

  n = write((int) ptr, result, strlen(result));
  if (n < 0) error("ERROR Writing to socket");
}

Quelqu'un peut m'aider? Merci.

En utilisant des fils de cette façon n'est pas de l'échelle. Il est préférable d'utiliser une select boucle sur le acceptées connexions.
N'oubliez pas de fermer le socket descripteur de fichier avant de le thread se termine.

OriginalL'auteur | 2010-09-15