Поделиться через


Код элемента управления SIO_QUERY_TRANSPORT_SETTING

Описание

Код элемента управления SIO_QUERY_TRANSPORT_SETTING запрашивает параметры транспорта в сокете.

Для выполнения этой операции вызовите функцию WSAIoctl или WSPIoctl со следующими параметрами.

int WSAIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_QUERY_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,     // pointer to the output buffer
  (DWORD) cbOutBuffer,       // size of output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
);
int WSPIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_QUERY_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,     // pointer to the output buffer
  (DWORD) cbOutBuffer,       // size of output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
  (LPWSATHREADID) lpThreadId,   // a WSATHREADID structure
  (LPINT) lpErrno   // a pointer to the error code.
);

Параметры

s

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

dwIoControlCode

Код элемента управления для операции. Используйте SIO_QUERY_TRANSPORT_SETTING для этой операции.

lpvInBuffer

Указатель на входной буфер. Этот параметр содержит указатель на структуру, в которой первым элементом структуры является структура TRANSPORT_SETTING_ID , которая определяет запрашиваемый параметр транспорта.

cbInBuffer

Размер входного буфера в байтах. Этот параметр зависит от запрашиваемого параметра транспорта.

lpvOutBuffer

Указатель на выходной буфер. Этот параметр зависит от запрашиваемого параметра транспорта, если параметры lpOverlapped и lpCompletionRoutine имеют значение NULL.

cbOutBuffer

Размер выходного буфера в байтах.

lpcbBytesReturned

Указатель на переменную, которая получает размер в байтах данных, хранящихся в выходном буфере.

Если выходной буфер слишком мал, вызов завершается ошибкой, WSAGetLastError возвращает WSAEINVAL, а параметр lpcbBytesReturned указывает на значение DWORD , равное нулю.

Если lpOverlapped имеет значение NULL, значение DWORD , на которое указывает параметр lpcbBytesReturned , возвращаемое при успешном вызове, не может быть равным нулю.

Если параметр lpOverlapped не равен NULL для перекрывающихся сокетов, будут инициированы операции, которые не могут быть завершены немедленно, а завершение будет указано позже. Значение DWORD , на которое указывает возвращаемый параметр lpcbBytesReturned , может быть равным нулю, так как размер хранимых данных не может быть определен до завершения перекрывающейся операции. Окончательное состояние завершения можно получить, когда соответствующий метод завершения получает сигнал о завершении операции.

lpvOverlapped

Указатель на структуру WSAOVERLAPPED .

Если сокеты были созданы без перекрываемого атрибута, параметр lpOverlapped игнорируется.

Если объект был открыт с перекрывающимся атрибутом, а параметр lpOverlapped не равен NULL, операция выполняется как перекрываемая (асинхронная) операция. В этом случае параметр lpOverlapped должен указывать на допустимую структуру WSAOVERLAPPED .

Для перекрывающихся операций функция WSAIoctl или WSPIoctl возвращается немедленно, а соответствующий метод завершения получает сигнал о завершении операции. В противном случае функция не возвращается, пока операция не будет завершена или не возникнет ошибка.

lpCompletionRoutine

Тип: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Указатель на подпрограмму завершения, вызываемую при завершении операции (игнорируется для неперекрывающихся сокетов).

lpThreadId

Указатель на структуру WSATHREADID , которая будет использоваться поставщиком в последующем вызове WPUQueueApc. Поставщик должен хранить указанную структуру WSATHREADID (не указатель на нее), пока не будет возвращена функция WPUQueueApc .

Примечание Этот параметр применяется только к функции WSPIoctl .

lpErrno

Указатель на код ошибки.

Примечание Этот параметр применяется только к функции WSPIoctl .

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

Если операция завершается успешно, функция WSAIoctl или WSPIoctl возвращает ноль.

Если операция завершается сбоем или находится в состоянии ожидания, функция WSAIoctl или WSPIoctl возвращает SOCKET_ERROR. Чтобы получить расширенные сведения об ошибке, вызовите WSAGetLastError.

Код ошибки Значение
ERROR_INSUFFICIENT_BUFFER Область данных, переданная в системный вызов, слишком мала. Эта ошибка возвращается, если буфер, на который указывает параметр lpvOutBuffer с размером буфера, переданным в параметре cbOutBuffer , слишком мал. Требуемый размер буфера будет возвращен в параметре lpcbBytesReturned .
WSA_IO_PENDING Перекрываемая операция была успешно инициирована, и ее завершение будет указано позже.
WSA_OPERATION_ABORTED Перекрываемая операция была отменена из-за закрытия сокета или выполнения команды IOCTL SIO_FLUSH .
WSAEFAULT Параметр lpvOutBuffer, lpcbBytesReturned, lpOverlapped или lpCompletionRoutine не полностью содержится в допустимой части адресного пространства пользователя.
WSAEINPROGRESS Функция вызывается при выполнении обратного вызова.
WSAEINTR Блокирующая операция была прервана.
WSAEINVAL Параметр dwIoControlCode не является допустимой командой, или указанный входной параметр недопустим, либо команда не применима к указанному типу сокета.
WSAENETDOWN Произошел сбой сетевой подсистемы.
WSAENOPROTOOPT Параметр сокета не поддерживается в указанном протоколе.
WSAENOTCONN Сокет не подключен.
WSAENOTSOCK Дескриптор не является сокетом.
WSAEOPNOTSUPP Указанная команда IOCTL не поддерживается. Эта ошибка возвращается, если SIO_QUERY_TRANSPORT_SETTING IOCTL не поддерживается поставщиком транспорта.

Комментарии

IOCTL SIO_QUERY_TRANSPORT_SETTING поддерживается в Windows 8, Windows Server 2012 и более поздних версиях операционной системы.

IOCTL SIO_QUERY_TRANSPORT_SETTING — это универсальный IOCTL, используемый для запроса параметров транспорта в сокете. Запрашиваемый параметр транспорта основан на TRANSPORT_SETTING_ID , переданном в параметре lpvInBuffer .

Единственный параметр транспорта в настоящее время определяется для возможности REAL_TIME_NOTIFICATION_CAPABILITY в сокете TCP.

Если для TRANSPORT_SETTING_ID , переданного в параметре lpvInBuffer , для элемента Guid задано значение REAL_TIME_NOTIFICATION_CAPABILITY, то это запрос на запрос параметров уведомлений в реальном времени для сокета TCP, используемого с ControlChannelTrigger для получения фоновых сетевых уведомлений в приложении Магазина Windows. Параметр lpvInBuffer должен указывать на структуру TRANSPORT_SETTING_ID . Параметр lpvOutBuffer должен указывать на структуру REAL_TIME_NOTIFICATION_SETTING_OUTPUT . Этот параметр транспорта применяется только к сокетам TCP. Этот параметр транспорта позволяет WinInet или аналогичным сетевым службам запрашивать заданный сокет TCP для определения состояния ControlChannelTrigger . Приложение Магазина Windows не будет вызывать этот IOCTL напрямую. Если вызов WSAIoctl или WSPIoctl выполнен успешно, этот IOCTL возвращает структуру REAL_TIME_NOTIFICATION_SETTING_OUTPUT с текущим состоянием.

IOCTL SIO_QUERY_TRANSPORT_SETTING позволяет winInet или аналогичным сетевым службам запрашивать состояние параметра транспорта для заданного сокета TCP, чтобы определить, включен ли ControlChannelTrigger в сокете. Приложение Магазина Windows не будет вызывать этот IOCTL напрямую.

Этот IOCTL применяется только к сокетам TCP.

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

CONTROL_CHANNEL_TRIGGER_STATUS

ControlChannelTrigger

REAL_TIME_NOTIFICATION_SETTING_OUTPUT

SIO_APPLY_TRANSPORT_SETTING

Сокета

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW