TCP Preforked Server не работает, реализация предварительно раздвоенного (версия процесса) TCP сервера не работает должным образом

В настоящее время я работаю над заданием, которое должно одновременно подключать не менее 16 клиентов к серверу (это должен быть предварительно сформированный сервер TCP), и проблема, с которой я сталкиваюсь сейчас, заключается в том, что после предварительной ветвления функция чтения работает неправильно, вот пример кода, заранее спасибо!

char buf[BUFLEN];

void treat_request(int newfd);

void treat_request(int newfd){
   bzero(buf,BUFLEN);
   int n = read(newfd,buf,BUFLEN);
   if(n < 0) printf("Something went wrong");
   if(n > 0) printf("All OK");
   if(buf[0] == REQUEST_T) printf("GOT IT");
}

int main (int argc, char ** argv){
   int sockfd, newfd, len;

   struct  sockaddr_in serv_addr, cli_addr;

   sockfd = socket(AF_INET, SOCK_STREAM, 0);

   bzero((char *) &serv_addr, sizeof(serv_addr));

   serv_addr.sin_family = AF_INET;
   serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
   serv_addr.sin_port = htons(atoi(argv[1]));

   bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));

   listen(sockfd,5);
   len = sizeof(cli_addr);
   for(int i = 0 ; i < NB_PROC;i++){
    if(fork() == 0){
       while(1){
        newfd = accept(sockfd, (struct sockaddr *) &cli_addr, &len);
        treat_request(newfd);
        close(newfd);
       }
    }
   }

   while(1) pause();

}

0 ответов

Другие вопросы по тегам