+ Responder ao Tópico



  1. #1
    tenho um programa que funciona da seguinte maneira, ele usa somente um socket, onde
    recebe todas as conecções, para cada conecção eu aloco um int para
    identificar a conexao mais ou menos assim (em pseudo codigo):

    void *funcao_do_thread (void *arg) {
    /*Faz a consulta SQL*/
    analisar(elemento_atual_da_fila->string_sql);

    /*Envia a resposta*/
    write(elemento_atual_da_fila->id_conexao,resposta);

    --------->> /*Fecha a conexao, o problema está aqui*/
    close(elemento_atual_da_fila->id_conexao);
    }

    O problema é simples. Se eu fecho a conexao, o programa nao executa o write
    de resposta. Se eu nao fecho, após exatas 1018 conexoes o programa da erro
    na chamada accept() e nao aceita mais nenhuma conexao. Acho que é o limite
    de conexoes abertas no mesmo socket, mas o que nao entendo é porque eu nao
    posso fechar a conexao.

    A funcao main esta mais ou menos assim

    int main (void) {
    int *id_conexao;
    /*Inicializa as variaveis de rede*/
    ...

    for (;<IMG SRC="images/forum/icons/icon_wink.gif"> {
    /*Aguarda requisicoes*/
    id_conexao =(int *)malloc(sizeof(int));
    if (*id_conexao = accept(socket_id,(struct sockaddr *)&isa, &tamanho) < 0)
    {
    erro();
    }
    else {
    i = read(*id_conexao,mensagem,sizeof(mensagem));
    /*Insere na fila a mensagem a ser respondida e o respectivo id da
    conexao*/
    insere_na_fila(mensagem,*id_conexao);
    }
    }
    ...
    }

    Estou fazendo o controle de race conditions, as mensagens enviadas no programa cliente estão chegando ao servidor, o unico problema é com as conexoes que se fechadas impedem o funcionamento de write, e se nao fechadas o socket aceite somente 1018 conexoes.

    []&acute;s

  2. bom tente fazer assim....

    bindei este servidor a porta X ... desta maneira com cada conexao solicitada pelo cliente voce cria um socket, quando o cliente fechar a conexao na outra ponta esse socket tbm fecha, eh simples.

    Creio eu q voce prescisa de 1 socket por cliente (conexao) e nao um socket para o servidor todo? que tal? tente e veja se funcione.



  3. #3
    mistmst, nao entendi muito bem o que voce falou. Se eu utilizar um socket pra cada conexao de cliente, como o cliente saberá em qual porta ele deverá conectar? È possivel criar varias sockets na mesma porta?

    E o que eha de errado em receber várias conexoes no mesmo socket?






Tópicos Similares

  1. Problema na distribuicao de e-mails nas contas internas
    Por maxwellsalles no fórum Servidores de Rede
    Respostas: 2
    Último Post: 14-04-2004, 14:13
  2. Problemas na instalação de hardware
    Por Jim no fórum Redes
    Respostas: 0
    Último Post: 06-04-2004, 18:20
  3. Problema na hora de carregar o Kernel
    Por Son Goku no fórum Servidores de Rede
    Respostas: 0
    Último Post: 18-03-2004, 18:58
  4. Rede ponto a ponto ad-hoc wireless problema na rota de retor
    Por denilson no fórum Servidores de Rede
    Respostas: 0
    Último Post: 24-09-2003, 14:32
  5. Problema na Criação de .PDF
    Por no fórum Servidores de Rede
    Respostas: 1
    Último Post: 02-09-2003, 09:30

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L