![]() |
|
Linguagem C - Dicas e ajuda para iniciantes - Versão de Impressão +- Forum Pplware (http://forum.pplware.com) +-- Fórum: Mais Tech (/forumdisplay.php?fid=11) +--- Fórum: Programação e Web (/forumdisplay.php?fid=16) +--- Tópico: Linguagem C - Dicas e ajuda para iniciantes (/showthread.php?tid=6936) |
RE: Linguagem C - Dicas e ajuda para iniciantes - jagsilva - 30-08-2011 19:02 recvfrom é a função de leitura do socket... o meu problema é que o programa fica lá parado à espera de dados nessa função. Se os dados não vierem o programa fica bloqueado. O que eu queria saber era como fazer um polling à função recvfrom e por exemplo a um temporizador, isto é, leio o relogio do sistema, depois solicito dados e por fim à espera dos dados mas em simultaneo vou lendo novamente o relogio do sistema para saber se já passaram 10 segundos (que indicam que o cliente nã0 esta ok) ajuda? RE: Linguagem C - Dicas e ajuda para iniciantes - wolfytuga - 30-08-2011 20:49 (30-08-2011 19:02)jagsilva Escreveu: recvfrom é a função de leitura do socket... Veja se isto ajuda! Ou então vê este link onde tem lá referido que existe a opção de erro SOCTIMEDOUT e ainda tem lá esta consideração (Programming considerations): Citar:The receive timeout value (the SO_RCVTIMEO setsockopt option) determines how long to wait for data to be received before the recvfrom function times out.Consulte a página, tem lá muita informação! RE: Linguagem C - Dicas e ajuda para iniciantes - jagsilva - 30-08-2011 21:34 hummm. Não é simples... O primeiro link não resolveu. já o segundo provavelmente será uma opcção mas terei de procurar um exemplo para a utilização se souberem de algo mais pf digam RE: Linguagem C - Dicas e ajuda para iniciantes - tcunha - 30-08-2011 22:48 Ser notificado pelo kernel quando alguma operação de I/O está disponível é aquilo a que se chama I/O Multiplexing. Normalmente e para este caso mais simples é uma questão de usar as syscalls select(2) ou poll(2). Ambas têm um paramêtro em que se pode passar um timeout. Noutros, usam-se as funções kqueue(2), epoll(2), etc. Embora dependam do sistema. Em caso de portabilidade libevent ou libev. O guia sobre network programming do beej é do melhor que se pode encontrar na Internet. Para algo mais sério, o Unix Network Programming (aka UNP) do W. Richard Stevens. Sobre performance esta página também é uma boa leitura. HTH. RE: Linguagem C - Dicas e ajuda para iniciantes - jagsilva - 01-09-2011 14:45 Obrigado pelas dicas... Já conhecia o beej e realmente é um bom apoio. Para quem usa win pode ver aqui a solução para o meu problema. Mais uma vez obrigado RE: Linguagem C - Dicas e ajuda para iniciantes - jagsilva - 03-09-2011 14:40 Tenho ainda mais uma questão provavelmente basica: Quando crio um socket (UPD) não posso usar esse mesmo socket para enviar e receber dados? Eu tenho um programa com duas funções: uma cria um socket envia dados e fecha o socket e a segunda abre um socket para receber dados (a resposta). Tentei juntar as duas e tenho um erro no bind: inicializo o socket e envio dados, depois faço bind e fico à espera da respsota. no bind dá erro... obrigado RE: Linguagem C - Dicas e ajuda para iniciantes - helder fortunato - 09-09-2011 19:14 boas wolfytuga ainda nao esperimentei como puseste aqui no forum,mas eu fiz de outra maneira parecido e está a funcionar como eu pretendia,isto é um programa que eu penssei construir em 4 fazes e esta era a terceira,bem vou por ai como eu fiz que tambem funciona depois dá uma opinião!!! float resultado; resultado=soma; if ((resultado < 201)) printf("recebes 100 euros\n"); if ((resultado <= 250)&&(resultado >=200)) printf("recebes 250 euros\n"); if ((resultado <= 300)&&(resultado >=250)) printf("recebes 400 euros\n"); if (( resultado <= 350)&&(resultado >=300)) printf("recebes 550 euros\n"); if (( resultado <= 400)&&(resultado >=350)) printf("recebes 700 euros\n"); if ((resultado <= 450)&&(resultado >=400)) printf("recebes 850 euros\n"); if (( resultado <= 500)&&(resultado >=450)) printf("recebes 1000 euros\n"); eu fiz assim porque sobre este resultado que ira dar denpendente da pontuaçao atingida quero fazer uma soma e outra operaçao de percentagens descontar 23% bem isto foi na tentativa e erro rsrs |