send

1. send

Paulo
paulo_moc

(usa Ubuntu)

Enviado em 19/09/2012 - 13:51h

tenho uma dúvida sobre essa função, ela aguarda até que uma mensagem chegue? ou ela só "olha o buffer" e ve se tem algo...


  


2. Re: send

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 03/10/2012 - 09:38h

Bem, a send é responsável por enviar dados. Você deve estar falando de recv. Nesse caso, ela espera até que dados cheguem ao socket para depois realizar a leitura (ela pode ler dados parciais, não necessariamente a quantidade total requisitada).

Se não há dados, a função "trava" o programa até que eles cheguem. Isso é conhecido como leitura assíncrona e você pode evitar isso usando a flags específicas no socket. Outro modo é utilizar funções como select(), que detectam quando há mudança no estado do socket.

Acho que é isso. t+


3. Re: send

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/10/2012 - 03:31h

Você em princípio não tem como saber se um datagrama chegou ao outro lado (a não que você esteja do outro lado).

O TCP, no entanto, tem um mecanismo de notificação de recebimento, que é essencial para que o protocolo implemente um de suas características principais, que é a retransmissão automática. O sistema mantém os dados que sua aplicação envia no buffer de saída, até que ele receba o aviso de recebimento desses dados e, só então, libere aquela parte do buffer novamente.

Se você tiver uma aplicação que precise fazer o controle de fluxo por si mesma, talvez deva repensar se quer mesmo usar TCP, pois você estará duplicando algo que o kernel já faz sozinho. Mas você poderia obter um efeito desse tipo controlando os tamanhos dos buffers de transmissão e repetição, e talvez usando a opção TCP_NODELAY no seu socket.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts