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 |
---|---|
Debe producirse una llamada WSAStartup correcta antes de usar esta función. | |
Error en el subsistema de red. | |
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. | |
El descriptor s no es un socket. | |
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 |