Функция ioctlsocket (winsock.h)

Функция ioctlsocket управляет режимом ввода-вывода сокета.

Синтаксис

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

Параметры

[in] s

Дескриптор, определяющий сокет.

[in] cmd

Команда, выполняемая в сокете. См . раздел Winsock IOCTLs.

[in, out] argp

Указатель на параметр для cmd.

Возвращаемое значение

После успешного завершения функция ioctlsocket возвращает ноль. В противном случае возвращается значение SOCKET_ERROR, а определенный код ошибки можно получить, вызвав WSAGetLastError.

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup .
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEINPROGRESS
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова.
WSAENOTSOCK
Дескриптор s не является сокетом.
WSAEFAULT
Параметр argp не является допустимой частью адресного пространства пользователя.

Комментарии

Функцию ioctlsocket можно использовать в любом сокете в любом состоянии. Он используется для задания или извлечения некоторых операционных параметров, связанных с сокетом, независимо от протокола и подсистемы связи. Ниже приведены поддерживаемые команды для использования в параметре cmd и их семантика:

Функция WSAIoctl используется для задания или получения операционных параметров, связанных с сокетом, транспортным протоколом или подсистемой связи.

Функция WSAIoctl более мощная, чем функция ioctlsocket , и поддерживает большое количество возможных значений для задания или извлечения рабочих параметров.

Пример кода

В следующем примере показано использование функции 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);
  

}

Совместимости

Эта функция ioctlsocket выполняет только подмножество функций в сокете по сравнению с функцией ioctl , найденной в сокетах Беркли. Функция ioctlsocket не имеет параметра команды, эквивалентного FIOASYNC ioctl, а SIOCATMARK — единственная команда уровня сокета, поддерживаемая ioctlsocket.

Windows Phone 8. Эта функция поддерживается для приложений Магазина Windows Phone Windows Phone 8 и более поздних версий.

Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.

Требования

Требование Значение
Минимальная версия клиента Windows 8.1, Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header winsock.h (включая Winsock2.h)
Библиотека Ws2_32.lib
DLL Ws2_32.dll

См. также раздел

WSAsyncSelect

WSAEventSelect

WSAIoctl

Функции Winsock

Справочник по Winsock

getsockopt

setsockopt

Сокета