Função ioctlsocket (winsock.h)

A função ioctlsocket controla o modo de E/S de um soquete.

Sintaxe

int 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 no soquete s. Consulte Winsock IOCTLs.

[in, out] argp

Um ponteiro para um parâmetro para cmd.

Retornar valor

Após a conclusão bem-sucedida, o ioctlsocket retornará zero. Caso contrário, um valor de SOCKET_ERROR será retornado e um código de erro específico poderá ser recuperado chamando WSAGetLastError.

Código do erro Significado
WSANOTINITIALISED
Uma chamada WSAStartup bem-sucedida deve ocorrer antes de usar essa função.
WSAENETDOWN
O subsistema de rede falhou.
WSAEINPROGRESS
Uma chamada de bloqueio do Windows Sockets 1.1 está em andamento ou o provedor de serviços ainda está processando uma função de retorno de chamada.
WSAENOTSOCK
O descritor s não é um soquete.
WSAEFAULT
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 protocolo e do subsistema de 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 do que a função ioctlsocket e dá suporte a um grande número de valores possíveis para os parâmetros operacionais definirem ou recuperarem.

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 comparada com a função ioctl encontrada em soquetes 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 do 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 posteriores.

Requisitos

Requisito Valor
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 winsock.h (inclua Winsock2.h)
Biblioteca Ws2_32.lib
DLL Ws2_32.dll

Confira também

WSAAsyncSelect

Wsaeventselect

Wsaioctl

Funções Winsock

Referência de Winsock

Getsockopt

Setsockopt

socket