Colocar Resposta 
 
Avaliação do Tópico:
  • 2 votos - 5 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Linguagem C - Dicas e ajuda para iniciantes
30-08-2011, 19:02
Mensagem: #51
RE: Linguagem C - Dicas e ajuda para iniciantes
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?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
30-08-2011, 20:49
Mensagem: #52
RE: Linguagem C - Dicas e ajuda para iniciantes
(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!

wolfytuga
Para o que der e vier...
emachines E520 | Intel Celeron 2.0GHz | 32/64bit | RAM 2GB | HD 160GB | Intel Mobile 4 Express, 64MB → 1GB
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
30-08-2011, 21:34
Mensagem: #53
RE: Linguagem C - Dicas e ajuda para iniciantes
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
30-08-2011, 22:48
Mensagem: #54
RE: Linguagem C - Dicas e ajuda para iniciantes
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.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-09-2011, 14:45
Mensagem: #55
RE: Linguagem C - Dicas e ajuda para iniciantes
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
03-09-2011, 14:40
Mensagem: #56
RE: Linguagem C - Dicas e ajuda para iniciantes
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
09-09-2011, 19:14 (Esta mensagem foi modificada pela última vez a: 09-09-2011 19:29 por helder fortunato.)
Mensagem: #57
RE: Linguagem C - Dicas e ajuda para iniciantes
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 8 Visitante(s)