Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ioctlsocket-Funktion steuert den E/A-Modus eines Sockets.
Syntax
int WSAAPI ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
Parameter
[in] s
Ein Deskriptor, der einen Socket identifiziert.
[in] cmd
Ein Befehl, der für die Sockets ausgeführt werden soll.
[in, out] argp
Ein Zeiger auf einen Parameter für cmd.
Rückgabewert
Nach erfolgreichem Abschluss gibt ioctlsocket null zurück. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode kann durch Aufrufen von WSAGetLastError abgerufen werden.
Fehlercode | Bedeutung |
---|---|
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen. | |
Fehler beim Netzwerksubsystem. | |
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet noch eine Rückruffunktion. | |
Der Deskriptor s ist kein Socket. | |
Der argp-Parameter ist kein gültiger Teil des Benutzeradressraums. |
Hinweise
Die ioctlsocket-Funktion kann für jeden Socket in einem beliebigen Zustand verwendet werden. Es wird verwendet, um einige Betriebsparameter festzulegen oder abzurufen, die dem Socket zugeordnet sind, unabhängig vom Protokoll- und Kommunikationssubsystem. Im Folgenden finden Sie die unterstützten Befehle, die im cmd-Parameter verwendet werden sollen, und deren Semantik:
Die WSAIoctl-Funktion wird verwendet, um Betriebsparameter festzulegen oder abzurufen, die dem Socket, dem Transportprotokoll oder dem Kommunikationssubsystem zugeordnet sind.
Die WSAIoctl-Funktion ist leistungsfähiger als die ioctlsocket-Funktion und unterstützt eine große Anzahl möglicher Werte für die Betriebsparameter, die festgelegt oder abgerufen werden können.
Beispielcode
Im folgenden Beispiel wird die Verwendung der Ioctlsocket-Funktion veranschaulicht.
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
void main()
{
//-------------------------
// Initialize Winsock
WSADATA wsaData;
int iResult;
u_long iMode = 0;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//-------------------------
// Create a SOCKET object.
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//-------------------------
// Set the socket I/O mode: In this case FIONBIO
// enables or disables the blocking mode for the
// socket based on the numerical value of iMode.
// If iMode = 0, blocking is enabled;
// If iMode != 0, non-blocking mode is enabled.
iResult = ioctlsocket(m_socket, FIONBIO, &iMode);
if (iResult != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", iResult);
}
Kompatibilität
Diese ioctlsocket-Funktion führt im Vergleich zur ioctl-Funktion in Berkeley-Sockets nur eine Teilmenge der Funktionen in einem Socket aus. Die ioctlsocket-Funktion verfügt über keinen Befehlsparameter, der dem FIOASYNC von ioctl entspricht, und SIOCATMARK ist der einzige Befehl auf Socketebene, der von ioctlsocket unterstützt wird.Windows Phone 8: Diese Funktion wird für Windows Phone Store-Apps ab Windows Phone 8 unterstützt.
Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps unter Windows 8.1, Windows Server 2012 R2 und höher unterstützt.
Anforderungen
Unterstützte Mindestversion (Client) | Windows 8.1, Windows Vista [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | winsock2.h (Winsock2.h einschließen) |
Bibliothek | Ws2_32.lib |
DLL | Ws2_32.dll |