Função ioctlsocket (winsock2.h)
A função ioctlsocket controla o modo de E/S de um soquete.
Sintaxe
int WSAAPI ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
Parâmetros
[in] s
Um descritor que identifica um soquete.
[in] cmd
Um comando a ser executado nos soquetes.
[in, out] argp
Um ponteiro para um parâmetro para cmd.
Valor retornado
Após a conclusão bem-sucedida, o ioctlsocket retornará zero. Caso contrário, um valor de SOCKET_ERROR é retornado e um código de erro específico pode ser recuperado chamando WSAGetLastError.
Código do erro | Significado |
---|---|
Uma chamada WSAStartup bem-sucedida deve ocorrer antes de usar essa função. | |
O subsistema de rede falhou. | |
Uma chamada do Windows Sockets 1.1 de bloqueio está em andamento ou o provedor de serviços ainda está processando uma função de retorno de chamada. | |
O descritor s não é um soquete. | |
O parâmetro argp não é uma parte válida do espaço de endereço do usuário. |
Comentários
A função ioctlsocket pode ser usada em qualquer soquete em qualquer estado. Ele é usado para definir ou recuperar alguns parâmetros operacionais associados ao soquete, independentemente do subsistema de protocolo e comunicações. Aqui estão os comandos com suporte para usar no parâmetro cmd e sua semântica:
A função WSAIoctl é usada para definir ou recuperar parâmetros operacionais associados ao soquete, ao protocolo de transporte ou ao subsistema de comunicações.
A função WSAIoctl é mais poderosa que a função ioctlsocket e dá suporte a um grande número de valores possíveis para os parâmetros operacionais a serem definidos ou recuperados.
Código de exemplo
O exemplo a seguir demonstra o uso da função 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);
}
Compatibilidade
Essa função ioctlsocket executa apenas um subconjunto de funções em um soquete quando comparado à função ioctl encontrada em soquetes de Berkeley. A função ioctlsocket não tem nenhum parâmetro de comando equivalente ao FIOASYNC de ioctl, e SIOCATMARK é o único comando de nível de soquete com suporte de ioctlsocket.Windows Phone 8: essa função tem suporte para aplicativos da Windows Phone Store no Windows Phone 8 e posterior.
Windows 8.1 e Windows Server 2012 R2: essa função tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posterior.
Requisitos
Cliente mínimo com suporte | Windows 8.1, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | winsock2.h (inclua Winsock2.h) |
Biblioteca | Ws2_32.lib |
DLL | Ws2_32.dll |