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
WSANOTINITIALISIERT
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen.
WSAENETDOWN
Beim Netzwerksubsystem ist ein Fehler aufgetreten.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion.
WSAENOTSOCK
Der Deskriptor s ist kein Socket.
WSAEFAULT
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

Weitere Informationen

WSAAsyncWählen

WSAEventSelect

WSAIoctl

Winsock-Funktionen

Winsock-Referenz

getsockopt

setsockopt

Socket