Я застрял в этом фрагменте кода, который имитирует взаимодействие сервер-клиент. Предположим, что sockfd - дескриптор файла сокета, созданный на стороне сервера.
Мой вопрос заключается в том, что пока родительский и его дочерний процессы выполняются «одновременно», и во время дочернего временного интервала он закрывает сокет сервера sockfd , а затем, когда поток выполнения, скажем, второй временной цикл, вызывающий функцию accpet, допустим ли там параметр sockfd , закрыт ли он дочерним процессом, т. е. удален из таблицы дескрипторов файла ядра?
while (1) {
//accept a connection from client,get the new socket from client
//is the sockfd valid here,is it closed by the child in
//the previous loop
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); // can't this cause problem ??
dostuff(newsockfd);
exit(0);
}
else close(newsockfd);
} /* end of while */