다음을 통해 공유


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.
);

매개 변수

소켓을 식별하는 설명자입니다.

dwIoControlCode

작업을 위한 제어 코드입니다. 이 작업에 는 SIO_QUERY_TRANSPORT_SETTING 사용합니다.

lpvInBuffer

입력 버퍼에 대한 포인터입니다. 이 매개 변수는 구조체의 첫 번째 멤버가 쿼리되는 전송 설정을 결정하는 TRANSPORT_SETTING_ID 구조체인 구조체에 대한 포인터를 포함합니다.

cbInBuffer

입력 버퍼의 크기(바이트)입니다. 이 매개 변수는 쿼리되는 전송 설정에 따라 달라집니다.

lpvOutBuffer

출력 버퍼에 대한 포인터입니다. 이 매개 변수는 lpOverlappedlpCompletionRoutine 매개 변수가 NULL인 경우 쿼리되는 전송 설정에 따라 달라집니다.

cbOutBuffer

출력 버퍼의 크기(바이트)입니다.

lpcbBytesReturned

출력 버퍼에 저장된 데이터의 크기(바이트)를 수신하는 변수에 대한 포인터입니다.

출력 버퍼가 너무 작으면 호출이 실패하고 WSAGetLastErrorWSAEINVAL을 반환하고 lpcbBytesReturned 매개 변수가 DWORD 값 0을 가리킵니다.

lpOverlappedNULL인 경우 성공적인 호출에서 반환되는 lpcbBytesReturned 매개 변수가 가리키는 DWORD 값은 0일 수 없습니다.

lpOverlapped 매개 변수가 겹치는 소켓에 대해 NULL이 아닌 경우 즉시 완료할 수 없는 작업이 시작되고 나중에 완료가 표시됩니다. 겹치는 작업이 완료될 때까지 저장된 데이터의 크기를 확인할 수 없으므로 반환되는 lpcbBytesReturned 매개 변수가 가리키는 DWORD 값은 0일 수 있습니다. 작업이 완료되면 적절한 완료 메서드가 신호를 받으면 최종 완료 상태 검색할 수 있습니다.

lpvOverlapped

WSAOVERLAPPED 구조체에 대한 포인터입니다.

소켓 겹치는 특성 없이 만들어진 경우 lpOverlapped 매개 변수는 무시됩니다.

겹치는 특성으로 열렸고 lpOverlapped 매개 변수가 NULL이 아닌 경우 작업은 겹치는(비동기) 작업으로 수행됩니다. 이 경우 lpOverlapped 매개 변수는 유효한 WSAOVERLAPPED 구조를 가리킵니다.

겹치는 작업의 경우 WSAIoctl 또는 WSPIoctl 함수는 즉시 반환되고 작업이 완료되면 적절한 완료 메서드가 신호를 보냅니다. 그렇지 않으면 작업이 완료되거나 오류가 발생할 때까지 함수가 반환되지 않습니다.

lpCompletionRoutine

형식: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

작업이 완료되었을 때 호출되는 완료 루틴에 대한 포인터입니다(겹치지 않는 소켓의 경우 무시됨).

lpThreadId

WPUQueueApc에 대한 후속 호출에서 공급자가 사용할 WSATHREADID 구조체에 대한 포인터입니다. 공급자는 WPUQueueApc 함수가 반환될 때까지 참조된 WSATHREADID 구조체(동일한 포인터가 아님)를 저장해야 합니다.

참고 이 매개 변수는 WSPIoctl 함수에 만 적용됩니다.

lpErrno

오류 코드에 대한 포인터입니다.

참고 이 매개 변수는 WSPIoctl 함수에 만 적용됩니다.

반환 값

작업이 성공적으로 완료되면 WSAIoctl 또는 WSPIoctl 함수는 0을 반환합니다.

작업이 실패하거나 보류 중인 경우 WSAIoctl 또는 WSPIoctl 함수는 SOCKET_ERROR 반환합니다. 확장된 오류 정보를 얻으려면 WSAGetLastError를 호출합니다.

오류 코드 의미
ERROR_INSUFFICIENT_BUFFER 시스템 호출에 전달된 데이터 영역이 너무 작습니다. 이 오류는 cbOutBuffer 매개 변수에 전달된 버퍼 크기가 있는 lpvOutBuffer 매개 변수가 가리키는 버퍼가 너무 작은 경우 반환됩니다. 필요한 버퍼 크기는 lpcbBytesReturned 매개 변수에 반환됩니다.
WSA_IO_PENDING 겹치는 작업이 성공적으로 시작되었으며 나중에 완료가 표시됩니다.
WSA_OPERATION_ABORTED 소켓의 닫기 또는 SIO_FLUSH IOCTL 명령 실행으로 인해 겹치는 작업이 취소되었습니다.
WSAEFAULT lpvOutBuffer, lpcbBytesReturned, lpOverlapped 또는 lpCompletionRoutine 매개 변수는 사용자 주소 공간의 유효한 부분에 완전히 포함되지 않습니다.
WSAEINPROGRESS 콜백이 진행 중일 때 함수가 호출됩니다.
WSAEINTR 차단 작업이 중단되었습니다.
WSAEINVAL dwIoControlCode 매개 변수가 유효한 명령이 아니거나 지정된 입력 매개 변수를 사용할 수 없거나 지정된 소켓 유형에 명령을 적용할 수 없습니다.
WSAENETDOWN 네트워크 하위 시스템이 실패했습니다.
WSAENOPROTOOPT 소켓 옵션은 지정된 프로토콜에서 지원되지 않습니다.
WSAENOTCONN 소켓이 연결되어 있지 않습니다.
WSAENOTSOCK 설명자 가 소켓이 아닙니다.
WSAEOPNOTSUPP 지정된 IOCTL 명령은 지원되지 않습니다. 이 오류는 SIO_QUERY_TRANSPORT_SETTING IOCTL이 전송 공급자에서 지원되지 않는 경우 반환됩니다.

설명

SIO_QUERY_TRANSPORT_SETTING IOCTL은 Windows 8 및 Windows Server 2012 이상 버전의 운영 체제에서 지원됩니다.

SIO_QUERY_TRANSPORT_SETTING IOCTL은 소켓의 전송 설정을 쿼리하는 데 사용되는 일반 IOCTL입니다. 쿼리되는 전송 설정은 lpvInBuffer 매개 변수에 전달된 TRANSPORT_SETTING_ID 기반으로 합니다.

현재 정의되는 유일한 전송 설정은 TCP 소켓의 REAL_TIME_NOTIFICATION_CAPABILITY 기능에 대한 것입니다.

lpvInBuffer 매개 변수에 전달된 TRANSPORT_SETTING_ID Guid 멤버가 REAL_TIME_NOTIFICATION_CAPABILITY 설정된 경우 Windows 스토어 앱에서 백그라운드 네트워크 알림을 수신하기 위해 ControlChannelTrigger와 함께 사용되는 TCP 소켓에 대한 실시간 알림 설정을 쿼리하는 요청입니다. lpvInBuffer 매개 변수는 TRANSPORT_SETTING_ID 구조를 가리킵니다. lpvOutBuffer 매개 변수는 REAL_TIME_NOTIFICATION_SETTING_OUTPUT 구조를 가리킵니다. 이 전송 설정은 TCP 소켓에만 적용됩니다. 이 전송 설정은 WinInet 또는 유사한 네트워크 서비스가 지정된 TCP 소켓을 쿼리하여 ControlChannelTrigger 상태 확인하는 방법을 제공합니다. Windows 스토어 앱은 이 IOCTL을 직접 호출하지 않습니다. WSAIoctl 또는 WSPIoctl 호출에 성공하면 이 IOCTL은 현재 상태 있는 REAL_TIME_NOTIFICATION_SETTING_OUTPUT 구조를 반환합니다.

SIO_QUERY_TRANSPORT_SETTING IOCTL은 WinInet 또는 유사한 네트워크 서비스가 지정된 TCP 소켓에 대한 전송 설정 상태 쿼리하여 ControlChannelTrigger가 소켓에서 사용하도록 설정되어 있는지 확인하는 방법을 제공합니다. Windows 스토어 앱은 이 IOCTL을 직접 호출하지 않습니다.

이 IOCTL은 TCP 소켓에만 적용됩니다.

추가 정보

CONTROL_CHANNEL_TRIGGER_STATUS

ControlChannelTrigger

REAL_TIME_NOTIFICATION_SETTING_OUTPUT

SIO_APPLY_TRANSPORT_SETTING

socket

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW