Witam zainteresowanych.

Znalazłem w necie prosty serwer wielowątkowy w C++ napisany pod Linuxa i działa na nim podłączenie wielu klientów, serwer otrzymuje wiadomość i odpowiada klientom. Sęk w tym, że po wysłaniu przez klienta pierwszej wiadomości połączenie zostaje zamknięte. Jestem przekonany, że to jakaś głupota albo moje zmęczenie ale nie mogę sam dojść do tego jak to zrobić, żeby serwer po stworzeniu fork()'iem procesu potomnego obsługiwał nadal pojedynczych klientów, każdego z osobna i bez zamykania połączenia po odpowiedzi do klienta. Mówiąc wprost chce wysyłać kolejne żądania klientem i dostawać odpowiedzi od serwera tak długo, aż serwer nie dostanie w żądaniu przykładowo komendy "exit". Z góry dzięki. Podaje kod w pierwotnej postaci:

#include <stdio.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

void dostuff(int); /* function prototype */
void error(char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno, clilen, pid;
     struct sockaddr_in serv_addr, cli_addr;

     if (argc < 2) {
         fprintf(stderr,"ERROR, no port provided\n");
         exit(1);
     }
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     if (sockfd < 0) 
        error("ERROR opening socket");
     bzero((char *) &serv_addr, sizeof(serv_addr));
     portno = atoi(argv[1]);
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(portno);
     if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0) 
              error("ERROR on binding");
     listen(sockfd,5);
     clilen = sizeof(cli_addr);
     while (1) {
         newsockfd = accept(sockfd, 
               (struct sockaddr *) &cli_addr, &clilen);
         if (newsockfd < 0) 
             error("ERROR on accept");
         pid = fork();
         if (pid < 0)
             error("ERROR on fork");
         if (pid == 0)  {
             close(sockfd);
             dostuff(newsockfd);
             exit(0);
         }
         else close(newsockfd);
     } /* end of while */
     return 0; /* we never get here */
}

void dostuff (int sock)
{
   int n;
   char buffer[256];
      
   bzero(buffer,256);
   n = read(sock,buffer,255);
   if (n < 0) error("ERROR reading from socket");
   printf("Here is the message: %s\n",buffer);
   n = write(sock,"I got your message",18);
   if (n < 0) error("ERROR writing to socket");
}