Linux

CentOS 5.3

udp(7)


UDP

NOM

udp − Protocole UDP pour IPv4

SYNOPSIS

#include <sys/socket.h>
#include <netinet/in.h>
udp_socket = socket(PF_INET, SOCK_DGRAM, 0);

DESCRIPTION

Il s’agit d’une implémentation de l’User Datagram Protocol décrit dans la RFC 768. Elle implémente un service de paquets datagrammes non-fiables, sans connexion. Les paquets peuvent être réordonnés ou dupliqués avant leur arrivée. UDP créé et vérifie des sommes de contrôle pour détecter les erreurs de transmission.

Lorsqu’une socket UDP est créée, ses adresses locales et distantes sont indéterminées. Les datagrammes peuvent être envoyés immédiatement en utilisant sendto(2) ou sendmsg(2) avec une adresse de destination valide en argument. Lorsque connect(2) est appelé sur une socket, l’adresse de destination par défaut est fixée, et les datagrammes pourront être envoyés avec send(2) ou write(2) sans spécifier d’adresse de destination. Il restera possible d’envoyer des données à d’autres destinations en passant l’adresse à sendto(2) ou sendmsg(2). Afin de recevoir les paquets, une socket doit être attachée à une adresse locale en utilisant bind(2). Sinon la couche socket affectera automatiquement une port local libre, hors de l’intervalle défini par net.ipv4.ip_local_port_range et attacher la socket à l’adresse INADDR_ANY.

Les opérations de réception ne renvoient qu’un seul paquet à la fois. Si le paquet est plus petit que le tampon transmis, il n’y aura pas plus de données renvoyées. S’il est plus grand, le paquet sera tronqué et le drapeau MSG_TRUNC sera activé. MSG_WAITALL n’est pas supporté.

Les options IP peuvent être fixées ou lues en utilisant les options des sockets décrites dans ip(7). Elles ne sont traitées par le noyau que lorsque le sysctl approprié est activé (mais sont quand même fournies à l’utilisateur quant il est inhibé). Voir ip(7).

Quand l’attribut MSG_DONTROUTE est actif à l’émission, l’adresse de destination doit représenter une adresse d’interface locale, et le paquet n’est envoyé qu’à cette interface.

UDP fragmente un paquet quand sa longueur totale excède le MTU de l’interface (Maximum Transmission Unit). Une alternative plus efficace pour le réseau est d’utiliser la recherche du MTU du chemin, comme indiqué dans la section IP_MTU_DISCOVER de ip(7).

FORMAT D’ADRESSE

UDP utilise le format d’adresse IPv4 sockaddr_in comme indiqué dans ip(7).

GESTION D’ERREUR

Toutes les erreurs fatales seront transmises à l’utilisateur comme un retour d’erreur même lorsque la socket n’est pas connectée. Ceci inclut les erreurs asynchrones reçues du réseau. Vous pouvez ainsi recevoir une erreur due à un paquet précédemment envoyé sur la même socket. Ce comportement diffère de celui de nombreuses autres implémentations des sockets BSD, qui ne transmettent pas d’erreur si la socket n’est pas connectée. Les comportements de Linux correspondent à la RFC 1122.

Pour assurer la compatibilité avec du code ancien dans Linux 2.0 et 2.2, on peut fixer l’option SOL_SOCKET SO_BSDCOMPAT pour ne recevoir les erreurs distantes que si la socket a été connectée (sauf pour EPROTO et EMSGSIZE). Les erreurs locales sont toujours transmises. Le support de cette option de socket a été retiré dans les derniers noyaux ; voir socket(7) pour plus d’information.

Lorsque l’option IP_RECVERR est active, toutes les erreurs sont stockées dans la file d’erreur de la socket et peuvent être lues avec recvmsg(2) en activant son option MSG_ERRQUEUE.

OPTIONS DE SOCKET

Pour positionner ou lire une option de socket, appelez getsockopt(2) pour lire ou setsockopt(2) pour écrire l’option avec l’argument niveau d’option configurer à IPPROTO_UDP.

UDP_CORK (depuis Linux 2.5.44)

Si cette option est activée, toute la sortie donnée de cette socket est accumulé dans un seul datagramme qui sera transmis lorsque l’option sera désactivée. Cette option ne doit pas être utilisée dans du code conçu pour être portable.

IOCTLS

Les ioctls sont accessibles avec l’appel système ioctl(2). La syntaxe correcte est :

int value;
error = ioctl(ucp_socket, ioctl_type, &value);

FIONREAD (SIOCINQ)

Prend en argument un pointeur sur un entier. Y écrit la taille en octets du prochain datagramme en attente, ou 0 si aucun datagramme n’est disponible.

TIOCOUTQ (SIOCOUTQ)

Renvoie le nombre d’octets de données dans la file d’émission locale. Seulement sur Linux 2.4 et ultérieurs.

De plus, les ioctls documentés dans ip(7) et socket(7) sont supportés.

ERREURS

Toutes les erreurs documentées pour socket(7) ou ip(7) peuvent être renvoyées lors d’une émission ou d’une réception sur une socket UDP.

ECONNREFUSED Aucun correspondant sur l’adresse destination associée à la socket. Ceci peut être causé par l’émission antérieure d’un paquet sur la socket.

VERSIONS

IP_RECVERR est une nouveauté de Linux 2.2.

AUTEUR

Cette page de manuel a été écrite par Andi Kleen.

VOIR AUSSI

ip(7), raw(7), socket(7)

RFC 768 pour le protocole UDP.
RFC 1122 pour les nécessités de l’hôte.
RFC 1191 pour une description de la recherche du MTU par chemin.

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 8 juin 2001 et révisée le 21 juillet 2006.

L’équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=en man 7 udp ». N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


udp(7)