このリンクから以下のコードスニペットを参照しています:
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 */
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");
}
fork()の呼び出し後、親と子の2つのプロセスがあります。
親プロセスの場合、else部分が当てはまるため、newsockfdを閉じます。ただし、newsockfdは、dostuffメソッドでのシステムコールの読み取りと書き込みのために子プロセスによって使用されます。この場合、システムコールの読み取りと書き込みは失敗しませんか?