CAsyncSocket::SetSockOpt

BOOLSetSockOpt (IntnOptionName,constVoid *LpOptionValue,IntnOptionLen,IntnLevelSOL_SOCKET=);

Rückgabewert

Ungleich NULL, wenn die Funktion erfolgreich ist; Ansonsten können 0 und einem bestimmten Fehlercode durch einen Aufruf der GetLastErrorabgerufen werden. Wenden Sie die folgenden Fehler auf dieser Member-Funktion:

Parameter

nOptionName

Die Socket-Option, für die der Wert gesetzt werden soll.

lpOptionValue

Ein Zeiger auf den Puffer, in dem der Wert für die angeforderte Option bereitgestellt ist.

nOptionLen

Die Größe des Puffers in Bytes lpOptionValue.

nLevel

Die Höhe, an der die Option definiert ist; die einzigen unterstützten Ebenen sind SOL_SOCKET und IPPROTO_TCP.

Bemerkungen

Rufen Sie diese Memberfunktion um eine Socket-Option festgelegt. SetSockOpt legt den aktuellen Wert für eine Socket-Option ein Socket jeglicher Art, in keinem Staat zugeordnet. Obwohl Optionen auf mehreren Ebenen Protokoll vorhanden sein können, definiert diese Spezifikation nur Optionen, die auf der obersten "Socket" befinden. Optionen beeinflussen Socketoperationen, z. B. ob beschleunigte Daten in den normalen Datenstrom empfangen werden, ob die broadcast-Nachrichten können über den Socket gesendet werden, und so weiter.

Es gibt zwei Arten von Socket-Optionen: Boolean, die eine Funktion oder Verhalten aktivieren oder deaktivieren und Optionen erfordern ein Ganzzahl-Wert oder eine Struktur. Um eine boolesche Option aktivieren, zeigt LpOptionValue auf eine ungleich NULL Ganzzahl. So deaktivieren die Option LpOptionValue Punkte in eine ganze Zahl gleich NULL. nOptionLen sollte gleich sizeof(BOOL) für boolesche Optionen. Für weitere Optionen LpOptionValue verweist auf die ganze Zahl oder Struktur, die enthält den gewünschten Wert für die Option und nOptionLen ist die Länge der ganze Zahl oder Struktur.

SO_LINGER steuert die Aktion ausgeführt, wenn nicht gesendete Daten ist in der Warteschlange auf einen Sockel und die Schließen -Funktion aufgerufen wird, um den Socket schließen. Weitere Informationen finden Sie unter Windows Sockets Programmieren Überlegungen in der Win32 SDK-Dokumentation.

Standardmäßig kann kein Socket (siehe binden) an eine lokale Adresse gebunden werden, die bereits verwendet wird. Gelegentlich kann jedoch es "eine Adresse auf diese Weise wiederverwenden" wünschenswert. Da jede Verbindung eindeutig durch die Kombination von lokalen und remote-Adressen identifiziert ist, gibt es kein Problem mit zwei Buchsen an die gleiche lokale Adresse gebunden, solange die remote-Adressen unterschiedlich sind.

Um der Windows Sockets-Implementierung zu informieren, dass ein binden Aufruf auf einem Socket nicht verboten werden sollte, da die gewünschte Adresse bereits von einem anderen Socket verwendet wird, sollte die Anwendung die Socketoption SO_REUSEADDR für den Socket vor Erteilung des binden Aufrufs festgelegt. Beachten Sie, dass die Option nur zum Zeitpunkt des Aufrufs binden interpretiert wird: Es ist daher unnötig (aber harmlos), die Option auf einen Socket ist nicht an eine vorhandene Adresse gebunden werden, und festlegen oder Zurücksetzen die Option nach dem binden Aufruf hat keine Auswirkung auf diese oder jede andere Sockel.

Eine Anwendung kann anfordern, dass die Windows Sockets-Implementierung die Verwendung von "Keep-alive-Pakete (TCP = Transmission Control Protocol)-Verbindungen durch Einschalten des SO_KEEPALIVE -Socket-Option aktivieren. (Informationen über "Keep-alive-Pakete finden Sie unter Windows Sockets Programmieren Überlegungen in der Win32 SDK-Dokumentation.) Eine Windows Sockets-Implementierung muss nicht unterstützen die Verwendung von Keepalives: ist dies der Fall, die genaue Semantik sind implementierungsspezifisch aber Abschnitt 4.2.3.6 RFC 1122 entsprechen sollte: "Requirements for Internethosts – Communication Layers." Wenn eine Verbindung, als das Ergebnis getrennt wird von "Keep-Alives" der Fehlercode WSAENETRESET zurückgegeben den Aufrufen im Gange auf dem Sockel, und alle nachfolgenden Aufrufe schlagen mit WSAENOTCONN.

Die TCP_NODELAY -Option deaktiviert den Nagle-Algorithmus. Der Nagle-Algorithmus wird verwendet, um die Verringerung der Zahl der kleine Pakete von einem Host gesendet durch Pufferung unbestätigte senden Daten, bis ein Full-Size-Paket gesendet werden kann. Jedoch für einige Anwendungen kann dieser Algorithmus Leistung beeinträchtigen, und TCP_NODELAY kann verwendet werden, um sie auszuschalten. Anwendungsentwickler sollten TCP_NODELAY nicht festgelegt, es sei denn, die Auswirkungen zu tun also anerkannte und gewünschte, da Einstellung TCP_NODELAY erhebliche negative Auswirkungen auf die Netzwerkleistung haben kann. TCP_NODELAY ist die einzige unterstützte Socketoption verwendeten Ebene IPPROTO_TCP; alle anderen Optionen verwenden Ebene SOL_SOCKET.

Einige Implementierungen von Windows Sockets Versorgung Debug-Informationen ausgegeben, wenn die SO_DEBUG -Option von einer Anwendung festgelegt ist.

Die folgenden Optionen sind für SetSockOptunterstützt. Der Typ gibt den Typ der Daten durch LpOptionValue behoben.

Wert Typ Bedeutung
SO_BROADCAST BOOL Ermöglichen Sie die Übertragung von broadcast-Nachrichten auf dem Sockel.
SO_DEBUG BOOL Datensatz debugging-Informationen.
SO_DONTLINGER BOOL Blockieren Sie nicht Close warten nicht gesendete Daten gesendet werden. Das Festlegen dieser Option entspricht dem Festlegen von SO_LINGER mit L_onoff auf NULL gesetzt.
SO_DONTROUTE BOOL Nicht weiterleiten: direkt an der Schnittstelle.
SO_KEEPALIVE BOOL -Keep-Alives senden.
SO_LINGER struct LINGER Verweilen Sie auf Schließen , wenn nicht gesendete Daten vorhanden sind.
SO_OOBINLINE BOOL Empfangen Sie Out-of-Band-Daten in den normalen Datenstrom.
SO_RCVBUF int Geben Sie für die Größe des Puffers empfängt.
SO_REUSEADDR BOOL Ermöglichen des Sockets an eine Adresse gebunden werden, die bereits verwendet wird. (Siehe binden.)
SO_SNDBUF int Geben Sie die Puffergröße für sendet.
TCP_NODELAY BOOL Deaktiviert den Nagle-Algorithmus für senden Koaleszenz.

Berkeley Software Distribution (BSD) Optionen für SetSockOpt nicht unterstützt werden:

Wert Typ Bedeutung
SO_ACCEPTCONN BOOL Socket überwacht
SO_ERROR int Fehlerstatus erhalten und klar.
SO_RCVLOWAT int Niedrigwasser Zeichen empfangen.
SO_RCVTIMEO int Timeout erhalten
SO_SNDLOWAT int Untergrenzenmarkierung senden.
SO_SNDTIMEO int Senden Sie timeout.
SO_TYPE int Typ des socket.
IP_OPTIONS SET-Optionen-Feld im IP-header.

CAsyncSocket Übersicht |nbsp; Member der Klasse | Hierarchiediagramm

Siehe auch&Nbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Bind, CAsyncSocket::Create, CAsyncSocket::GetSockOpt, CAsyncSocket::IOCtl

Index