NOME¶
udp - Protocolo UDP do IPv4.
SINÓPSE¶
#include <sys/socket.h>
#include <netinet/in.h>
udp_socket = socket(PF_INET, SOCK_DGRAM, 0);
DESCRIÇÃO¶
Esta é uma implementação do User Datagram Protocol descrito na
RFC768. Ele implementa um serviço de datagramas sem checagem dos pacotes
e não orientado a conexão. Os pacotes podem ser reordenados ou
duplicados antes de chegar ao destino. O UDP gera e checa a validade
(checksum) dos pacotes para pegar possíveis erros de transmissão.
Quando um soquete UDP é criado, os endereços local e remoto são
indefinidos. Os datagramas podem ser usados imediatamente através do
comando:
sendto(2) ou
sendmsg(2) com um endereço de destino
válido como argumento. Quando o comando
connect(2) é usado no
soquete, o endereço de destino padrão é definido e o datagrama
pode ser enviado usando-se o comando:
send(2) ou
write(2) sem a
necessidade de especificação do endereço de destino. Pode-se
também enviar para outros destinos passando um endereço para o
comando
sendto(2) ou
sendmsg(2). Para poder receber os pacotes
um endereço local deve ser definido para o soquete usando-se o comando:
bind(2), quando este não é o caso, a camada do soquete
automáticamente atribuirá uma porta local ao primeiro requisito do
usuário.
Todas as operações de recepção retornam apenas um pacote.
Quando o pacote é menor do que o buffer informado, apenas a quantidade
referente aos dados é retornada. Quando o pacote é maior o mesmo
é truncado e o indicador
MSG_TRUNC é ativado.
Opções IP podem ser enviadas ou recebidas usando as opções
do soquete descritas no
ip(7). Elas só são processadas pelo
Linux quando a sysctl apropriada está habilitada (mas ainda é
passada para o usuário mesmo quando desativada). veja no
ip(7).
Quando o indicador
MSG_DONTROUTE está ativo, o envio do
endereço de destino deve referir-se ao endereço da interface local e
o pacote só é enviado para esta interface.
O UDP fragmenta um pacote quando seu tamanho total excede a MTU (Maximum
Transmission Unit) da interface. Uma alternativa mais amigável é
usar a deteção da MTU como descrita na seção
IP_PMTU_DISCOVER do
ip(7).
O UDP usa o formato de endereço
sockaddr_in do IPv4 descrito no
ip(7).
TRATAMENTO DE ERROS¶
Todos os erros fatais serão passados para o usuário como um erro
retornado mesmo quando o soquete não está conectado. Esta
característica difere de outras implementações de soquete BSD
que não passam quaisquer erros a menos que o soquete esteja conectado.
Esta característica no Linux está de acordo com a
RFC1122.
Para compatibilidade é possível definir a opção SOL_SOCKET
SO_BSDCOMPAT para só receber erros remotos quando o soquete
estiver conectado (exceto para
EPROTO e
EMSGSIZE). É melhor
corrigir o código para manipular os erros adequadamente do que habilitar
esta opção. Os erros gerados localmente sempre serão passados.
Quando a opção
IP_RECVERR está habilitada todos os erros
são armazenados na fila de erros do soquete e podem ser recebidos pelo
recvmsg(2) com o indicador
MSG_ERRQUEUE ativado.
ERROS¶
Todos os erros documentados pelo
socket(7) ou
ip(7) podem ser
retornado por um send ou receive em um soquete UDP.
ECONNREFUSED Nenhum receptor foi associado ao endereço de destino.
Isto pode ter sido causado por um pacote enviado anteriormente no soquete.
VERSÕES¶
IP_RECVERR é uma nova característica do Linux 2.2
CRÉDITOS¶
Esta página de manual foi escrita por Andi Kleen.
VEJA TAMBÉM¶
ip(7),
socket(7),
raw(7).
RFC768 - O protocolo UDP.
RFC1122 - Requesitos da máquina.
RFC1191 - Descrição da deteção do MTU.
TRADUZIDO POR LDP-BR em 21/08/2000.¶
[u00E1]bio Henrique F. Silva <fabiohfs@mail.com> (Tradução)
André L. Fassone Canova <lonelywolf@blv.com.br>
(revisão)