Función ioctlsocket (winsock.h)

La función ioctlsocket controla el modo de E/S de un socket.

Sintaxis

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

Parámetros

[in] s

Descriptor que identifica un socket.

[in] cmd

Comando que se va a realizar en el socket s. Consulte IoCTLs de Winsock.

[in, out] argp

Puntero a un parámetro para cmd.

Valor devuelto

Una vez finalizada correctamente, el ioctlsocket devuelve cero. De lo contrario, se devuelve un valor de SOCKET_ERROR y se puede recuperar un código de error específico mediante una llamada a WSAGetLastError.

Código de error Significado
WSANOTINITIALISED
Debe producirse una llamada WSAStartup correcta antes de usar esta función.
WSAENETDOWN
Error en el subsistema de red.
WSAEINPROGRESS
Una llamada de Bloqueo de Windows Sockets 1.1 está en curso o el proveedor de servicios sigue procesando una función de devolución de llamada.
WSAENOTSOCK
El descriptor s no es un socket.
WSAEFAULT
El parámetro argp no es una parte válida del espacio de direcciones del usuario.

Comentarios

La función ioctlsocket se puede usar en cualquier socket en cualquier estado. Se usa para establecer o recuperar algunos parámetros operativos asociados al socket, independientemente del subsistema de protocolo y comunicaciones. Estos son los comandos admitidos para usar en el parámetro cmd y su semántica:

La función WSAIoctl se usa para establecer o recuperar parámetros operativos asociados con el socket, el protocolo de transporte o el subsistema de comunicaciones.

La función WSAIoctl es más eficaz que la función ioctlsocket y admite un gran número de valores posibles para que los parámetros operativos establezcan o recuperen.

Código de ejemplo

En el ejemplo siguiente se muestra el uso de la función 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);
  

}

Compatibilidad

Esta función ioctlsocket realiza solo un subconjunto de funciones en un socket en comparación con la función ioctl que se encuentra en sockets berkeley. La función ioctlsocket no tiene ningún parámetro de comando equivalente al FIOASYNC de ioctl y SIOCATMARK es el único comando de nivel de socket compatible con ioctlsocket.

Windows Phone 8: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8 y versiones posteriores.

Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8.1, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado winsock.h (incluya Winsock2.h)
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Funciones winsock

Referencia de Winsock

getsockopt

setsockopt

socket