Forum Pplware
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)

Páginas: 1 2 3 4 5 6


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

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