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.)

questionAnswers(1)

yourAnswerToTheQuestion