Freigeben über


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

Siehe auch

Referenz

CAsyncSocket-Klasse

Hierarchien-Diagramm

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl