getsockopt, setsockopt - Lire et écrire les options d'une socket
Bibliothèque C standard (
libc,
-lc)
#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname,
void optval[restrict *.optlen],
socklen_t *restrict optlen);
int setsockopt(int sockfd, int level, int optname,
const void optval[.optlen],
socklen_t optlen);
getsockopt() et
setsockopt() manipulent les options
associées à la socket à laquelle fait
référence le descripteur de fichier
sockfd. Ces options
peuvent exister aux divers niveaux de protocole, et sont toujours
présentes au niveau socket le plus élevé.
Quand on manipule une option d'une socket, il faut préciser le niveau
où elle s'applique, et le nom de l'option. Au niveau de l'API des
sockets,
level prend la valeur
SOL_SOCKET. Pour tous les autres
niveaux, il faut fournir le numéro de protocole approprié. Par
exemple, pour une option interprétée par le protocole
TCP,
level prendra le numéro du protocole
TCP.
Consultez
getprotoent(3).
Les paramètres
optval et
optlen sont utilisés pour
déterminer les options pour
setsockopt(). Pour
getsockopt
ils identifient un tampon dans lequel la valeur de l'option
désirée doit être renvoyée. Pour
getsockopt,
optlen est un paramètre résultat,
contenant initialement la taille du tampon pointé par
optval, et
rempli en retour pour indiquer la taille effective des valeurs
renvoyées. Si aucune option n'est fournie ou renvoyée,
optval peut être NULL.
optname et toute autre option sont passés sans
interprétation au protocole approprié, pour qu'il
l'interprète lui‐même. Le fichier d'en‐tête
<sys/socket.h> contient les définitions pour le niveau
socket. Les options pour les autres niveaux de protocole peuvent varier tant
en format qu'en nom, consultez les pages de manuel de la section 7 pour plus
d'informations.
La plupart des options au niveau socket utilisent un paramètre de type
int pour
optval. Pour
setsockopt(), un paramètre
non nul valide une option booléenne, et zéro l'invalide.
Pour une description des options disponibles consultez
socket(7) et les
pages correspondant au protocole concerné.
En cas de succès,
0 est renvoyé pour les options standards.
En cas d'échec,
-1 est renvoyé et
errno est
positionné pour indiquer l'erreur.
Netfilter permet au programmeur de définir des options
personnalisées pour un socket avec des gestionnaires
associés ; pour de telles options, le code de retour est la
valeur renvoyée par le gestionnaire en cas de succès.
- EBADF
-
sockfd n'est pas un descripteur de fichier
valable.
- EFAULT
-
optval pointe en dehors de l'espace d'adressage
accessible. Avec getsockopt(), ceci peut s'appliquer
également à optlen.
- EINVAL
-
optlen non valable pour setsockopt(). Dans
certains cas cette erreur peut aussi se produire pour une valeur non
valable de optval (par exemple, pour l'option
IP_ADD_MEMBERSHIP décrite dans ip(7)).
- ENOPROTOOPT
- L'option est inconnue pour ce protocole.
- ENOTSOCK
- Le descripteur de fichier sockfd ne fait pas
référence à un socket.
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (ces appels système sont apparus
pour la première fis dans 4.2BSD).
Pour plus de détails sur le type
socklen_t, voir
accept(2).
Plusieurs options sur les sockets devraient être gérées
à un niveau plus bas par le système.
ioctl(2),
socket(2),
getprotoent(3),
protocols(5),
ip(7),
packet(7),
socket(7),
tcp(7),
udp(7),
unix(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Philippe
MENGUAL <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]