+ Responder ao Tópico



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

  2. #2
    andre_udi
    Ao criar uma thread, vc cria uma outra linha de execucao no seu programa, isso inclui areas para texto, seg de dados e pilha.
    Já o fork é utilizado para criacao de processos, + precisamente ele cria uma imagem( processo filho ) do processo q o chamou( processo pai ).
    A funcao fork retorna 0 para o processo filho e o pid o processo filho para o pai( -1 se erro ). Por isso o if( !fork ) no codigo, para saber se esta executando o processo pai ou filho.

    ate



  3. Agradeço a ajuda mas e quanto a estrutura sigaction e a função sigchld_handler??? Esta última sempre dá problema quando tento compilar...alguem sabe o que é?! Já a estrutura, para que ela serve??






Tópicos Similares

  1. Desligar servidor linux em uma hora automaticamente...
    Por leandroapbatista no fórum Servidores de Rede
    Respostas: 6
    Último Post: 24-01-2006, 23:23
  2. WEBMAIL - Apache em um servidor, postfix em outro
    Por buribai no fórum Servidores de Rede
    Respostas: 3
    Último Post: 17-05-2005, 08:28
  3. Servidor NIS em rede diferente
    Por pedromorgado no fórum Servidores de Rede
    Respostas: 3
    Último Post: 03-09-2004, 13:37
  4. Compartilhas dois Servidores WEB em uma unica REDE.
    Por danielvbhp no fórum Servidores de Rede
    Respostas: 0
    Último Post: 04-06-2004, 10:03
  5. 2º Servidor DNS em rede interna (Intranet)
    Por AndrewAmorimdaSilva no fórum Servidores de Rede
    Respostas: 3
    Último Post: 11-10-2002, 20:26

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L