ioctlsocket-Funktion (winsock.h)
Die Ioctlsocket-Funktion steuert den E/A-Modus eines Sockets.
Syntax
int 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 den Socket s ausgeführt werden soll. Weitere Informationen finden Sie unter Winsock-IOCTLs.
[in, out] argp
Ein Zeiger auf einen Parameter für cmd.
Rückgabewert
Nach erfolgreichem Abschluss gibt das 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. | |
Beim Netzwerksubsystem ist ein Fehler aufgetreten. | |
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin 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 jedem Zustand verwendet werden. Es wird verwendet, um einige Betriebsparameter festzulegen oder abzurufen, die dem Socket zugeordnet sind, unabhängig vom Protokoll und dem Kommunikationssubsystem. Hier sind 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 leistungsstärker als die Ioctlsocket-Funktion und unterstützt eine große Anzahl möglicher Werte für das Festlegen oder Abrufen der Betriebsparameter.
Beispielcode
Im folgenden Beispiel wird die Verwendung der Funktion ioctlsocket 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 von Funktionen auf 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 auf Windows Phone 8 und höher unterstützt.
Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.
Anforderungen
Anforderung | Wert |
---|---|
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 | winsock.h (einschließlich Winsock2.h) |
Bibliothek | Ws2_32.lib |
DLL | Ws2_32.dll |