IP_PKTINFO Socketoption

Die IP_PKTINFO Socketoption ermöglicht es einer Anwendung, die Rückgabe von Paketinformationen durch die LPFN_WSARECVMSG-Funktion (WSARecvMsg) in einem IPv4-Socket zu aktivieren oder zu deaktivieren.

Um die status dieser Socketoption abzufragen, rufen Sie die Funktion getockopt auf. Um diese Option festzulegen, rufen Sie die Funktion setsockopt mit den folgenden Parametern auf.

Wert der Socketoption

Die Konstante, die diese Socketoption darstellt, ist 19.

Syntax

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
);

Parameter

s [in]

Ein Deskriptor, der den Socket identifiziert.

Ebene [in]

Die Ebene, auf der die Option definiert ist. Verwenden Sie für diesen Vorgang IPPROTO_IP .

optname [in]

Die Socketoption, für die der Wert abgerufen oder festgelegt werden soll. Verwenden Sie für diesen Vorgang IP_PKTINFO.

optval [out]

Ein Zeiger auf den Puffer, der den Wert für die festzulegende Option enthält. Dieser Parameter sollte auf einen Puffer zeigen, der der Größe eines DWORD-Werts entspricht oder größer ist.

Dieser Wert wird als boolescher Wert behandelt, wobei 0 verwendet wird, um FALSE (deaktiviert) anzugeben, und ein nonzero-Wert, um TRUE (aktiviert) anzugeben.

optlen [in, out]

Ein Zeiger auf die Größe des Optval-Puffers in Bytes. Diese Größe muss gleich oder größer als die Größe eines DWORD-Werts sein.

Rückgabewert

Wenn der Vorgang erfolgreich abgeschlossen wurde, gibt die Funktion getsockopt oder setsockopt null zurück.

Wenn der Vorgang fehlschlägt, wird der Wert SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode kann durch Aufrufen von WSAGetLastError abgerufen werden.

Fehlercode Bedeutung
WSANOTINITIALISED
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen.
WSAENETDOWN
Beim Netzwerksubsystem ist ein Fehler aufgetreten.
WSAEFAULT
Einer der optval - oder optlen-Parameter verweist auf den Speicher, der sich nicht in einem gültigen Teil des Benutzeradressraums befindet. Dieser Fehler wird auch zurückgegeben, wenn der Wert, auf den der optlen-Parameter verweist, kleiner als die Größe eines DWORD-Werts ist.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion.
WSAEINVAL
Ein ungültiges Argument wurde angegeben. Dieser Fehler wird zurückgegeben, wenn der Levelparameter unbekannt oder ungültig ist. Unter Windows Vista und höher wird dieser Fehler auch zurückgegeben, wenn sich der Socket in einem Übergangszustand befand.
WSAENOPROTOOPT
Die Option ist unbekannt oder wird von der angegebenen Protokollfamilie nicht unterstützt. Dieser Fehler wird zurückgegeben, wenn der Typparameter für den Socketdeskriptor, der im s-Parameter übergeben wurde, nicht SOCK_DGRAM oder SOCK_RAW wurde.
WSAENOTSOCK
Der Deskriptor ist kein Socket.

 

Bemerkungen

Die getockopt-Funktion , die mit der IP_PKTINFO Socketoption aufgerufen wird, ermöglicht es einer Anwendung zu ermitteln, ob Paketinformationen von der LPFN_WSARECVMSG -Funktion (WSARecvMsg) für einen IPv4-Socket zurückgegeben werden sollen.

Die setockopt-Funktion , die mit der IP_PKTINFO Socketoption aufgerufen wird, ermöglicht es einer Anwendung, die Rückgabe von Paketinformationen durch die LPFN_WSARECVMSG -Funktion (WSARecvMsg) zu aktivieren oder zu deaktivieren. Die option IP_PKTINFO für einen Socket ist standardmäßig deaktiviert (auf FALSE festgelegt).

Wenn diese Socketoption für einen IPv4-Socket vom Typ SOCK_DGRAM oder SOCK_RAW aktiviert ist, gibt die LPFN_WSARECVMSG-Funktion (WSARecvMsg) Paketinformationen in der WSAMSG-Struktur zurück, auf die der lpMsg-Parameter verweist. Eines der Steuerelementdatenobjekte in der zurückgegebenen WSAMSG-Struktur enthält eine in_pktinfo-Struktur , die zum Speichern empfangener Paketadresseninformationen verwendet wird.

Für Datagramme, die von der LPFN_WSARECVMSG -Funktion (WSARecvMsg) über IPv4 empfangen werden, enthält das Control-Element der empfangenen WSAMSG-Struktur eine WSABUF-Struktur , die eine WSACMSGHDR-Struktur enthält. Das cmsg_level Member dieser WSACMSGHDR-Struktur würde IPPROTO_IP enthalten, das cmsg_type Element dieser Struktur IP_PKTINFO und das cmsg_data Member eine in_pktinfo Struktur zum Speichern empfangener IPv4-Paketadresseninformationen. Die IPv4-Adresse in der in_pktinfo-Struktur ist die IPv4-Adresse, von der das Paket empfangen wurde.

Wenn eine Anwendung bei einem Dual-Stack-Datagrammsocket die LPFN_WSARECVMSG -Funktion (WSARecvMsg) benötigt, um Paketinformationen in einer WSAMSG-Struktur für Datagramme zurückzugeben, die über IPv4 empfangen wurden, muss IP_PKTINFO Socketoption für den Socket auf true festgelegt werden. Wenn nur die Option IPV6_PKTINFO für den Socket auf true festgelegt ist, werden Paketinformationen für Datagramme bereitgestellt, die über IPv6 empfangen wurden, aber möglicherweise nicht für Datagramme, die über IPv4 empfangen wurden.

Wenn eine Anwendung versucht, die IP_PKTINFO Socketoption für einen Dual-Stack-Datagrammsocket festzulegen und IPv4 auf dem System deaktiviert ist, schlägt die setockopt-Funktion fehl, und WSAGetLastError wird mit dem Fehler WSAEINVAL zurückgegeben. Derselbe Fehler wird auch von der funktion setsockopt als Ergebnis anderer Fehler zurückgegeben. Wenn eine Anwendung versucht, eine IPPROTO_IP-Level-Socketoption für einen Dual-Stack-Socket festzulegen, und dies mit WSAEINVAL zu einem Fehler führt, sollte die Anwendung ermitteln, ob IPv4 auf dem lokalen Computer deaktiviert ist. Eine Methode, mit der erkannt werden kann, ob IPv4 aktiviert oder deaktiviert ist, ist das Aufrufen der Socketfunktion mit dem af-Parameter , der auf AF_INET festgelegt ist, um einen IPv4-Socket zu erstellen. Wenn die Socketfunktion fehlschlägt und WSAGetLastError einen Fehler von WSAEAFNOSUPPORT zurückgibt, bedeutet dies, dass IPv4 nicht aktiviert ist. In diesem Fall kann ein Setockopt-Funktionsfehler beim Festlegen der IP_PKTINFO Socketoption von der Anwendung ignoriert werden. Andernfalls sollte ein Fehler beim Festlegen der IP_PKTINFO Socketoption als unerwarteter Fehler behandelt werden.

Beachten Sie, dass die Ws2ipdef.h-Headerdatei automatisch in Ws2tcpip.h enthalten ist und niemals direkt verwendet werden sollte.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]
Header
Ws2ipdef.h (einschließlich Ws2tcpip.h)

Siehe auch

Dual-Stack-Sockets

getsockopt

in_pktinfo

IPPROTO_IP Socketoptionen

IPV6_PKTINFO

setsockopt

Socket

WSAMSG

LPFN_WSARECVMSG (WSARecvMsg)