UDP(7)

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

FORMATO DO ENDEREÇO
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.
bio Henrique F. Silva <fabiohfs@mail.com> (Tradução) André L. Fassone Canova <lonelywolf@blv.com.br> (revisão)