bindresvport(3) Affecter une socket à un port IP privilégié

SYNOPSIS

#include <sys/types.h>
#include <netinet/in.h>
int bindresvport(int sockfd, struct sockaddr_in *sin);

DESCRIPTION

bindresvport() est utilisée pour affecter un descripteur de socket à un port IP privilégié anonyme, c'est-à-dire un numéro de port arbitrairement sélectionné dans l'intervalle [512, 1023].

Si le bind(2) réalisé par bindresvport() réussi et si sin est non NULL, alors sin->sin_port renvoie le numéro de port alloué.

sin peut être NULL, dans ce cas sin->sin_family est simplement considéré comme AF_INET. Cependant, dans ce cas, bindresvport() ne peut renvoyer le port actuellement alloué (cette information peut être obtenu ultérieurement avec getsockname(2)).

VALEUR RENVOYÉE

bindresvport() renvoie 0 en cas de succès. En cas d'erreur, -1 est renvoyé et errno est définie.

ERREURS

bindresvport() peut échouer pour les mêmes raisons que bind(2). De plus, les erreurs suivantes peuvent se produire :
EACCES
L'appelant n'a pas les privilèges suffisants (la capacité CAP_NET_BIND_SERVICE est nécessaire).
EADDRINUSE
Tous les ports privilégiés sont utilisés.
EAFNOSUPPORT (EPFNOSUPPORT dans la glibc 2.7 et les versions précédentes)
sin est non NULL et sin->sin_family n'est pas AF_INET.

ATTRIBUTS

Multithreading (voir pthreads(7))

Avant glibc 2.17, la fonction bindresvport() utilisait une variable statique non protégée, et n’était donc pas sûre dans un contexte multithread.

Depuis glibc 2.17, la fonction bindresvport() utilise un verrou de protection de variable statique, donc elle est sûre dans un contexte multithread.

CONFORMITÉ

Absent de POSIX.1-2001. Présent sur les systèmes BSD, Solaris et beaucoup d'autres.

NOTES

Contrairement à d'autres implémentations de bindresvport(), l'implémentation de la glibc ignore toutes les valeurs que l'appelant passe à sin->sin_port.

COLOPHON

Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <[email protected]> ou par un rapport de bogue sur le paquet manpages-fr.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».