CAsyncSocket::SetSockOpt
Rufen Sie die Memberfunktion auf, um eine Socketoption festzulegen.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
Parameter
nOptionName
Die Socketoption, für die der Wert festgelegt werden soll.lpOptionValue
Ein Zeiger auf den Puffer, in dem der Wert für die angeforderte Option angegeben wird.nOptionLen
Die Größe des lpOptionValue Puffers in Bytes.nLevel
Die Ebene, an der die Option definiert ist; Ebenen sind die einzigen unterstützten SOL_SOCKET und IPPROTO_TCP.
Rückgabewert
ungleich 0 (null), wenn die Funktion erfolgreich; andernfalls 0 und ein bestimmter Fehlercode können abgerufen werden, indem Sie GetLastError aufruft.Die folgenden Fehler gelten für diese Memberfunktion zu:
Vor der Verwendung dieser APIs WSANOTINITIALISED einem erfolgreichen AfxSocketInit muss auftreten.
WSAENETDOWN, das die Windows Socket-Implementierung hat, dass das Netzwerksubsystem fehlgeschlagen ist.
WSAEFAULT lpOptionValue ist nicht in einem gültigen Teil des Prozessadressbereichs.
Ist blockierenden Windows Socket-Vorgang WSAEINPROGRESS A ausgeführt.
WSAEINVAL nLevel ist ungültig oder Informationen in lpOptionValue sind ungültig.
WSAENETRESET Verbindung wurde überschritten, wenn SO_KEEPALIVE festgelegt ist.
WSAENOPROTOOPT die Option ist unbekannt oder nicht unterstützt.Insbesondere wird SO_BROADCAST nicht auf Sockets des Typs SOCK_STREAM unterstützt, während SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER und SO_OOBINLINE nicht auf Sockets des Typs SOCK_DGRAM unterstützt werden.
WSAENOTCONN Verbindung ist zurückgesetzt werden, wenn SO_KEEPALIVE festgelegt ist.
WSAENOTSOCK der Deskriptor ist kein Socket.
Hinweise
SetSockOpt legt den aktuellen Wert für eine Socketoption fest, die einem Socket jedes Typs, in jedem Zustand zugeordnet ist.Obwohl Optionen auf mehreren Protokollebenen befinden können, definiert diese Spezifikation nur Optionen, die auf der obersten Ebene. Socket" "Optionsaffektsocketvorgänge, wie, ob beschleunigte Daten im normalen Datenstream empfangen werden, ob Broadcastmeldungen auf dem Socket gesendet werden können, u. a.
Es gibt zwei Typen Socketoptionen: Boolesche Optionen, die eine Funktion oder ein Verhalten aktivieren oder deaktivieren und Optionen, die einen ganzzahligen Wert erfordern oder strukturieren.Um eine boolesche Option zu aktivieren, zeigt lpOptionValue in eine ganze Zahl ungleich 0 (null).Um die Option zu deaktivieren, zeigt lpOptionValue auf eine ganze Zahl gleich null.nOptionLen sollte gleich sizeof(BOOL) für boolesche Optionen sein.Für andere Optionen zeigt lpOptionValue die ganze Zahl oder die Struktur, die den gewünschten Wert für die Option enthält, und nOptionLen ist die Länge der ganze Zahl oder der Struktur.
SO_LINGER steuert die Aktion, wenn ungesendete Daten auf einem Socket in die Warteschlange gestellt werden und die Close-Funktion aufgerufen wird, um den Socket zu schließen.
Standardmäßig kann ein Socket nicht (siehe Bindung), einer lokalen Adresse gebunden werden, die bereits in Gebrauch ist.Es kann jedoch ist es möglicherweise wünschenswert, eine Adresse "auf diese Weise wiederzuverwenden".Da jede Verbindung eindeutig durch die Kombination von lokalen und Remoteversionen Adressen identifiziert wird, gibt es kein Problem mit Mit zwei Sockets, die der gleichen lokalen Adresse gebunden werden, solange die Remoterollen Adressen unterschiedlich sind.
Um die Windows Socket-Implementierung zu informieren dass ein Bind Aufruf auf einem Socket nicht nicht zugelassen werden soll da die gewünschte Adresse bereits von einem anderen Socket verwendet wird, sollte die Anwendung die SO_REUSEADDR Socketoption für den Socket festlegen bevor der Bind Aufruf ausgibt.Beachten Sie, dass die Option nur zum Zeitpunkt des Aufrufs Bind interpretiert wird: Daher ist es nicht erforderlich (aber) die Option auf einen Socket, der keiner vorhandenen Adresse gebunden werden soll, und Festlegen oder dem Zurücksetzen der Option, nachdem der Bind Aufruf keine Auswirkungen auf dieses oder verfügt jedes beliebigen anderen Sockets festzulegen Sicherheit.
Eine Anwendung kann anfordern, dass die Windows Socket-Implementierung die Verwendung von "Keep-Alive-" Pakete auf Verbindungen des TCP (Transmission Control Protocol) aktivieren, indem sie die SO_KEEPALIVE Socketoption Dokumentkopie aus.Halten-alives Windows Sockets, die Implementierung, muss nicht die Verwendung von zu unterstützen: Wenn dies der Fall ist, ist die genaue Semantik, implementierungsabhängig sollte jedoch entsprechen, um 4.2.3.6 von RFC 1122 zu unterteilen: "Anforderungen für Internet-Hosts – Kommunikationsebenen." Wenn eine Verbindung als Ergebnis "abgelegt wird, haltenSie" den Fehlercode zurückgegeben wird WSAENETRESET in allen vorhandenen Verbindungen auf dem Socket, und alle nachfolgenden Aufrufe schlagen mit WSAENOTCONN aus.
Die TCP_NODELAY Option deaktiviert den Nagle-Algorithmus.Der Nagle-Algorithmus wird verwendet, um die Anzahl der Päckchen zu reduzieren, die durch einen Host übertragen werden, indem unquittiert puffert, senden Daten, bis ein maximiertes Paket gesendet werden kann.Für einige Anwendungen dieser Algorithmus können die Leistung beeinträchtigen, und TCP_NODELAY kann verwendet werden, um es zu deaktivieren.Anwendungsentwickler sollten TCP_NODELAY nicht festlegen, es sei denn, die Auswirkungen dazu Well-verstanden und gescannt werden, da das Festlegen von TCP_NODELAY signifikanten negativen Auswirkungen auf Speichermenge haben kann.TCP_NODELAY ist die einzige unterstützte Socketoption, der obersten Ebene IPPROTO_TCP verwendet; weitere ganze Optionsverwendungsebene SOL_SOCKET.
Einige Implementierungen von Windows Socket-Zubehörausgabedebuginformationen, wenn die Option SO_DEBUG durch eine Anwendung festgelegt wird.
Die folgenden Optionen werden für SetSockOpt unterstützt.Der Typ gibt den Typ der Daten, die vom lpOptionValue behandelt werden.
Wert |
Typ |
Bedeutung |
---|---|---|
SO_BROADCAST |
BOOL |
Lassen Sie Übertragung der Broadcastmeldungen auf dem Socket. |
SO_DEBUG |
BOOL |
Zeichnen Sie Debuginformationen. |
SO_DONTLINGER |
BOOL |
Blockieren Sie nicht Close, das auf die ungesendeten gesendet werden, wartet Daten.Diese Option festzulegen ist zum Festlegen von SO_LINGER mit l_onoff entsprechend, das auf Null bereitgestellt wird. |
SO_DONTROUTE |
BOOL |
Führen Sie nicht weiter: senden Sie direkt zur Schnittstelle. |
SO_KEEPALIVE |
BOOL |
Send halten-alives. |
SO_LINGER |
Struktur BLEIBEN zurück |
Behalten Sie auf Close zurück, wenn ungesendete Daten vorhanden sind. |
SO_OOBINLINE |
BOOL |
Empfangen Sie Out-of-Band-Daten im normalen Datenstream. |
SO_RCVBUF |
int |
Geben Sie Puffergröße für erhält an. |
SO_REUSEADDR |
BOOL |
Den zu einer Adresse gebunden werden Socket, die bereits in Gebrauch ist.(Siehe Bindung.) |
SO_SNDBUF |
int |
Geben Puffergröße für senden an. |
TCP_NODELAY |
BOOL |
Deaktivieren Nagle-Algorithmus den für das Verschmelzen senden. |
Die Optionen des Berkeley Software Distribution (Bd), die nicht für SetSockOpt unterstützt werden, sind:
Wert |
Typ |
Bedeutung |
---|---|---|
SO_ACCEPTCONN |
BOOL |
Socket lauscht |
SO_ERROR |
int |
Rufen Sie Fehler-Status ab und deaktivieren Sie. |
SO_RCVLOWAT |
int |
Empfangen Sie Untergrenzenmarkierung. |
SO_RCVTIMEO |
int |
Empfangen Sie Timeout |
SO_SNDLOWAT |
int |
Senden Sie Untergrenzenmarkierung. |
SO_SNDTIMEO |
int |
Senden Sie Timeout. |
SO_TYPE |
int |
Typ des Sockets. |
IP_OPTIONS |
|
Legen Sie Optionsfeld in IP-Header fest. |
Anforderungen
Header: afxsock.h