Share via


ioctlsocket-Funktion (winsock2.h)

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
WSANOTINITIALISIERT
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen.
WSAENETDOWN
Fehler beim Netzwerksubsystem.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet noch 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 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

Weitere Informationen

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Winsock-Funktionen

Winsock-Referenz

getsockopt

setsockopt

Socket