Servidor multithread em c++
Pessoal to com um problema sério!
Estou tentando criar um servidor que aceite múltiplas conexões!
Estou utilizando threads, mas estou enfrentando alguns problemas pois nunca havia programado threads em linux!!!
Li também algo sobre a função fork() mas não entendi como ela funciona. Até peguei um exemplo mas continuo sem entender... alguem pode me dar uma forca?! ai em baixo tem os trechos do código que eu não entendi... quanto a parte de sockets eu to acostumando mas depois de sigaction eu fiquei perdido...
Qual seria a diferença entre fork() e thread?? No meu caso o que seria melhor usar?
Código :
void sigchld_handler(int s)
{
while(wait(NULL) > 0);
}
(...)
int main (){
(...)
if (listen(sockfd, 10 ) == -1) {
perror("listen");
exit(1);
}
struct sigaction sa;
sa.sa_handler = sigchld_handler; // retira todos os processos ociosos
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGCHLD, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
while(1) { // loop principal accept()
sin_size = sizeof(struct sockaddr_in);
if ((nova_fd = accept(sockfd, (struct sockaddr*)&outro_end,&sin_size)) == -1)
{
perror("accept");
continue;
}
printf("servidor: recebeu conexão de%s\n",inet_ntoa(outro_end.sin_addr));
if (!fork()) { // este é o processo-filho
close(sockfd); // o filho não precisa de escutar conexões
if (send(nova_fd, "Olá , Beleza!\n", 14,0) == -1)
perror("send");
close(nova_fd);
exit(0);
}
close(nova_fd); // o processo principal não precisa disso
}
return 0;
}
caso queiram ver o codigo completo
http://olinux.uol.com.br/artigos/395/print_preview.html
Valeu...