_Option de socket PKTINFO IP
L' _ option de socket IP PKTINFO permet à une application d’activer ou de désactiver le retour des informations de paquets par la fonction LPFN_WSARECVMSG (WSARECVMSG) sur un socket IPv4.
Pour interroger l’état de cette option de socket, appelez la fonction getsockopt . Pour définir cette option, appelez la fonction setsockopt avec les paramètres suivants.
Valeur d’option de socket
La constante qui représente cette option de socket est 19.
Syntaxe
int getsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IP, // level
(int) IP_PKTINFO, // optname
(char *) optval, // output buffer,
(int) optlen, // size of output buffer
);
int setsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IP, // level
(int) IP_PKTINFO, // optname
(char *) optval, // input buffer,
(int) optlen, // size of input buffer
);
Paramètres
-
[ dans]
-
Descripteur identifiant le Socket.
-
de niveau [ dans]
-
Niveau auquel l’option est définie. Utilisez l' _ adresse IP IPPROTO pour cette opération.
-
nom_d [ ' $ dans]
-
Option de socket pour laquelle obtenir ou définir la valeur. Utilisez l’adresse IP _ PKTINFO pour cette opération.
-
optval [ à]
-
Pointeur vers la mémoire tampon contenant la valeur de l’option à définir. Ce paramètre doit pointer vers une mémoire tampon égale ou supérieure à la taille d’une valeur DWORD .
Cette valeur est traitée comme une valeur booléenne avec 0 utilisé pour indiquer false (désactivé) et une valeur différente de zéro pour indiquer la valeur true (activé).
-
optlen [ in, out]
-
Pointeur vers la taille, en octets, de la mémoire tampon optval . Cette taille doit être supérieure ou égale à la taille d’une valeur DWORD .
Valeur retournée
Si l’opération se termine avec succès, la fonction getsockopt ou setsockopt retourne la valeur zéro.
Si l’opération échoue, une valeur d’erreur de SOCKET _ est renvoyée et un code d’erreur spécifique peut être récupéré en appelant WSAGetLastError.
| Code d'erreur | Signification |
|---|---|
| Un appel WSAStartup réussi doit se produire avant l’utilisation de cette fonction. |
|
| Le sous-système réseau a échoué. |
|
| L’un des paramètres optval ou optlen pointent vers la mémoire qui n’est pas dans une partie valide de l’espace d’adressage de l’utilisateur. Cette erreur est également retournée si la valeur vers laquelle pointe le paramètre optlen est inférieure à la taille d’une valeur DWORD . |
|
| un appel de blocage Windows sockets 1,1 est en cours, ou le fournisseur de services traite toujours une fonction de rappel. |
|
| Argument non valide fourni. Cette erreur est retournée si le paramètre de niveau est inconnu ou non valide. sur Windows Vista et versions ultérieures, cette erreur est également retournée si le socket est dans un état de transition. |
|
| L’option est inconnue ou non prise en charge par la famille de protocoles indiquée. Cette erreur est retournée si le paramètre de type pour le descripteur de socket passé dans le paramètre s n’était pas chaussette _ DGRAM ou chaussette _ RAW. |
|
| Le descripteur n’est pas un Socket. |
Remarques
La fonction getsockopt appelée avec l' _ option IP PKTINFO Socket permet à une application de déterminer si les informations de paquet doivent être retournées par la fonction LPFN_WSARECVMSG (WSARECVMSG)pour un socket IPv4.
La fonction setsockopt appelée avec l' _ option de socket IP PKTINFO permet à une application d’activer ou de désactiver le retour des informations de paquets par la fonction LPFN_WSARECVMSG (WSARECVMSG) . L' _ option IP PKTINFO pour un socket est désactivée (définie sur false) par défaut.
Lorsque cette option de socket est activée sur un socket IPv4 de type chaussette _ DGRAM ou chaussette _ RAW, la fonction LPFN_WSARECVMSG (WSARECVMSG) retourne des informations de paquets dans la structure WSAMSG vers laquelle pointe le paramètre lpMsg . L’un des objets de données de contrôle de la structure WSAMSG retournée contient une structure _ pktinfo utilisée pour stocker les informations d’adresse de paquet reçues.
Pour les datagrammes reçus par la fonction LPFN_WSARECVMSG (WSARECVMSG) sur IPv4, le membre du contrôle de la structure WSAMSG reçu contient une structure WSABUF qui contient une structure WSACMSGHDR . Le membre de _ niveau CMSG de cette structure WSACMSGHDR contiendrait IPPROTO _ IP, le membre de _ type CMSG de cette structure contient l’adresse IP _ PKTINFO et le membre de _ données CMSG contient une structure dans _ PKTINFO utilisée pour stocker les informations d’adresse de paquet IPv4 reçues. L’adresse IPv4 dans la structure _ pktinfo est l’adresse IPv4 à partir de laquelle le paquet a été reçu.
Pour un socket de datagramme à double pile, si une application requiert la fonction LPFN_WSARECVMSG (WSARECVMSG) pour retourner les informations de paquets dans une structure WSAMSG pour les datagrammes reçus sur IPv4, _ l’option de socket IP PKTINFO doit avoir la valeur true sur le Socket. Si seule l’option IPv6 _ PKTINFO a la valeur true sur le socket, des informations de paquet sont fournies pour les datagrammes reçus via IPv6, mais elles peuvent ne pas être fournies pour les datagrammes reçus sur IPv4.
Si une application tente de définir l' _ option de socket IP PKTINFO sur un socket de datagramme à double pile et que IPv4 est désactivé sur le système, la fonction setsockopt échoue et WSAGetLastError retourne avec une erreur de WSAEINVAL. Cette même erreur est également retournée par la fonction setsockopt à la suite d’autres erreurs. Si une application tente de définir une _ option de socket de niveau IP IPPROTO sur un socket à double pile et échoue avec WSAEINVAL, l’application doit déterminer si IPv4 est désactivé sur l’ordinateur local. Une méthode qui peut être utilisée pour détecter si IPv4 est activé ou désactivé consiste à appeler la fonction Socket avec le paramètre AF défini sur AF _ inet pour essayer de créer un socket IPv4. Si la fonction Socket échoue et que WSAGetLastError retourne une erreur de WSAEAFNOSUPPORT, cela signifie que IPv4 n’est pas activé. Dans ce cas, une fonction setsockopt ayant échoué lors de la tentative de définition de l' _ option de socket IP PKTINFO peut être ignorée par l’application. Sinon, un échec lors de la tentative de définition de l' _ option de socket PKTINFO IP doit être traité comme une erreur inattendue.
Notez que le fichier d’en-tête Ws2ipdef. h est automatiquement inclus dans Ws2tcpip. h et ne doit jamais être utilisé directement.
Configuration requise
| Condition requise | Valeur |
|---|---|
| Client minimal pris en charge |
Windows [Applications de bureau XP uniquement] |
| Serveur minimal pris en charge |
Windows Serveur 2003 [ applications de bureau uniquement] |
| En-tête |
|