Bifurcação antes ou depois de aceitar conexões?
O trecho de código a seguir cria quatro processos, todos compartilhando o mesmo soquete de escuta.
Existe algum perigo em fazer isso? Devo sempre ter um processo de escuta e um garfo depois que as conexões são aceitas, da maneira convencional?
for (p = 0; p < 3; p++) {
pid = fork();
if (pid == 0) break;
}
while (1) {
unsigned int clientlen = sizeof(echoclient);
/* Wait for client connection */
if ((clientsock =
accept(serversock, (struct sockaddr *) &echoclient,
&clientlen)) < 0) {
die("Failed to accept client connection");
}
fprintf(stdout, "Process No. %d - Client connected: %s\n",
p,
inet_ntoa(echoclient.sin_addr));
handle_client(clientsock);
}
(Eu entendo que bifurcar depois de aceitar permite que um programa faça um processo por conexão. Estou brincando com proto-threads e várias coisas assíncronas, então estou apenas olhando para ter um processo por núcleo.)