CAsyncSocket::IOCtl
Rufen Sie die Memberfunktion auf, um den Modus eines Sockets zu steuern.
BOOL IOCtl(
long lCommand,
DWORD* lpArgument
);
Parameter
lCommand
Der Befehl, auf dem Socket auszuführen.lpArgument
Ein Zeiger auf einen Parameter für lCommand.
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.
WSAEINVAL lCommand ist kein gültiger Befehl, oder lpArgument ist kein Parameter für eine lCommand, oder der Befehl nicht dem Typ des Sockets angegeben werden.
Ist blockierenden Windows Socket-Vorgang WSAEINPROGRESS A ausgeführt.
WSAENOTSOCK der Deskriptor ist kein Socket.
Hinweise
Diese Routine kann auf jedem Socket in einem beliebigen Zustand verwendet werden.Sie wird verwendet, um die Betriebsparameter abzurufen oder abzurufen, die dem Socket, Unabhängigem des Protokolls und Kommunikations-Subsystem zugeordnet werden.Die folgenden Befehle werden unterstützt:
FIONBIO aktivieren oder deaktivieren nicht blockierende Modus auf dem Socket.Der lpArgument-Parameter zeigt bei DWORD, der ungleich 0 (null) ist, wenn nicht blockierende Modus, aktiviert und null sein soll, wenn er deaktiviert werden soll.Wenn AsyncSelect auf einem Socket ausgegeben wurde, schlägt jeder Versuch, IOCtl verwenden, um den Socket zurück zu blockierenden Modus festzulegen mit WSAEINVAL aus.Um den Socket zurück zu blockierenden Modus festzulegen und den WSAEINVAL Fehler zu verhindern, muss eine Anwendung AsyncSelect indem AsyncSelect mit dem lEvent-Parameter zuerst deaktivieren gleich 0, dann aufruft IOCtl ruft auf.
FIONREAD bestimmen die maximale Anzahl von Bytes, die mit einem Receive Aufruf von diesem Socket gelesen werden können.Der lpArgument-Parameter zeigt bei DWORD, in denen IOCtl das Ergebnis gespeichert wird.Wenn dieser Socket vom Typ SOCK_STREAM ist, gibt FIONREAD die Gesamtmenge der Daten zurück, die Receive einzelnes gelesen werden können; Dies ist normalerweise identisch die Gesamtmenge der Daten, die auf dem Socket in die Warteschlange gestellt werden.Wenn dieser Socket vom Typ SOCK_DGRAM ist, gibt FIONREAD die Größe des ersten Datagramms zurück, das auf dem Socket in die Warteschlange gestellt wird.
SIOCATMARK bestimmen, ob alle Out-of-Band-Daten gelesen wurden.Dies gilt nur für einen Socket des Typs SOCK_STREAM zu, der für inline Aufnahme aller Out-of-Band-Daten (SO_OOBINLINE) konfiguriert wurde.Wenn keine Out-of-Band-Daten warten gelesen werden, gibt die Operation Wert ungleich 0 (null) zurück.Andernfalls wird 0 zurückgegeben und folgende Receive oder ReceiveFrom, die auf dem Socket ausgeführt wird, rufen einige oder alle Daten ab, die der Markierung" vorausgehen; " sollte die Anwendung den SIOCATMARK Vorgang verwenden, um zu bestimmen, ob Daten bleiben.Wenn es dabei normalen Daten gibt, die den "dringenden" vorausgehen (nicht auf Band aufgenommenen) Daten, wird er in der Reihenfolge empfangen.(Hinweis, dem Receive oder ReceiveFrom nie die nicht auf Band aufgenommenen und normalen Daten in demselben Aufruf kombinieren.) Der lpArgument-Parameter zeigt bei DWORD, in denen IOCtl das Ergebnis gespeichert wird.
Diese Funktion ist eine Teilmenge von ioctl(), wie in Berkeley-Sockets verwendet.Insbesondere gibt es keinen Befehl, der zu FIOASYNC entspricht, während SIOCATMARK der einzige SocketEbene Befehl ist, der unterstützt wird.
Anforderungen
Header: afxsock.h