Funzione ioctlsocket (winsock.h)

La funzione ioctlsocket controlla la modalità I/O di un socket.

Sintassi

int ioctlsocket(
  [in]      SOCKET s,
  [in]      long   cmd,
  [in, out] u_long *argp
);

Parametri

[in] s

Descrittore che identifica un socket.

[in] cmd

Comando da eseguire sul socket s. Vedere Winsock IOCTLs.

[in, out] argp

Puntatore a un parametro per cmd.

Valore restituito

Al termine, ioctlsocket restituisce zero. In caso contrario, viene restituito un valore di SOCKET_ERROR e è possibile recuperare un codice di errore specifico chiamando WSAGetLastError.

Codice di errore Significato
WSANOTINITIALISED
Prima di usare questa funzione, è necessario che venga eseguita una chiamata WSAStartup riuscita.
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEINPROGRESS
È in corso una chiamata di Windows Sockets 1.1 bloccante oppure il provider di servizi sta ancora elaborando una funzione di callback.
WSAENOTSOCK
Il descrittore s non è un socket.
WSAEFAULT
Il parametro argp non è una parte valida dello spazio indirizzi utente.

Commenti

La funzione ioctlsocket può essere usata in qualsiasi socket in qualsiasi stato. Viene usato per impostare o recuperare alcuni parametri operativi associati al socket, indipendentemente dal protocollo e dal sottosistema di comunicazione. Ecco i comandi supportati da usare nel parametro cmd e la relativa semantica:

La funzione WSAIoctl viene usata per impostare o recuperare i parametri operativi associati al socket, al protocollo di trasporto o al sottosistema di comunicazione.

La funzione WSAIoctl è più potente della funzione ioctlsocket e supporta un numero elevato di valori possibili per i parametri operativi da impostare o recuperare.

Codice di esempio

Nell'esempio seguente viene illustrato l'uso della funzione ioctlsocket .

#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);
  

}

Compatibilità

Questa funzione ioctlsocket esegue solo un subset di funzioni su un socket rispetto alla funzione ioctl trovata in Berkeley sockets. La funzione ioctlsocket non ha parametri di comando equivalenti a FIOASYNC di ioctl e SIOCATMARK è l'unico comando a livello di socket supportato da ioctlsocket.

Windows Phone 8: questa funzione è supportata per le app dello Store di Windows Phone in Windows Phone 8 e versioni successive.

Windows 8.1 e Windows Server 2012 R2: questa funzione è supportata per le app di Windows Store in Windows 8.1, Windows Server 2012 R2 e versioni successive.

Requisiti

Requisito Valore
Client minimo supportato Windows 8.1, Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione winsock.h (include Winsock2.h)
Libreria Ws2_32.lib
DLL Ws2_32.dll

Vedi anche

WSAAsyncSelect

WSAEventSelect

Wsaioctl

Funzioni Winsock

Informazioni di riferimento su Winsock

getsockopt

Setsockopt

socket