Modifier les options sur une socket

Problème

Vous souhaitez modifier les options sur une socket, tel par exemple, le fait qu’elle devienne non bloquante.

Solution

Utilisez setsockopt() ou fcntl().

Discussion

La fonction setsockopt() permet de spécifier des options à une socket alors que la fonction fcntl() les spécifie au descripteur de fichiers, ce qui s’applique donc aussi à une socket. Si nous voulons rendre une socket non bloquante à la lecture, c’est une propriété du descripteur de fichier et nous utilisons donc fcntl() :


int options; 
options = fcntl (socket_id, F_GETFL, 0); 
fcntl (socket_id, F_SETFL, options | O_NONBLOCK);
 

Pour éviter de générer un signal SIGPIPE si une connexion est coupée, nous utilisons setsockopt() :


int optval; 
int optlen; 
optval = 1; 
optlen = sizeof (int); 
setsockopt (socket_id, SOL_SOCKET, SO_NOSIGPIPE, &optval, &optlen);
 

Vous pouvez connaître les options disponibles sur les pages de manuel respectives de fcntl() et surtout setsockopt().

Prototypes


#include <sys/types.h> 
#include <sys/socket.h> 
 
int getsockopt (int s, int level, int optname, void *optval, 
                int *optlen); 
int setsockopt (int s, int level, int optname, const void *optval, 
                int optlen); 
 
#include <fcntl.h> 
 
int fcntl (int fd, int cmd, int arg);
 

Voir aussi les pages de manuel des fonctions setsockopt() et fcntl().

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Résoudre le problème des architectures petit et gros boutistes
Suivant
Introduction