Share via


Winsock IOCTL

이 섹션에서는 다양한 버전의 Windows 운영 체제에 대한 IOCTL(Winsock Socket 입력/출력 컨트롤)에 대해 설명합니다. WSAIoctl 또는 WSPIoctl 함수를 사용하여 Winsock IOCTL을 실행하여 소켓, 전송 프로토콜 또는 통신 하위 시스템의 모드를 제어합니다.

일부 Winsock IOCTL에는 이 표에서 전달할 수 있는 것보다 더 많은 설명이 필요합니다. 이러한 옵션에는 추가 topics 대한 링크가 포함되어 있습니다.

dwIoControlCode 매개 변수가 이제 32비트 엔터티인 만큼 opcode 식별자 공간을 분할하는 편리한 방법을 제공하면서 현재 정의된 ioctlsocket opcode를 유지하는 인코딩 체계를 채택할 수 있습니다. dwIoControlCode 매개 변수는 Windows Sockets 1.1 및 Unix 제어 코드와의 이전 버전과의 호환성을 유지하면서 새 제어 코드를 추가할 때 프로토콜 및 공급업체의 독립성을 허용하도록 빌드되었습니다. dwIoControlCode 매개 변수에는 다음과 같은 형식이 있습니다.

I O V T 공급업체/주소 패밀리 코드
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0

참고

테이블에 표시되는 dwIoControlCode 매개 변수의 비트는 열별로 위에서 아래로 세로로 읽어야 합니다. 따라서 가장 왼쪽 비트는 비트 31이고, 다음 비트는 비트 30이고, 가장 오른쪽 비트는 비트 0입니다.

입력 버퍼가 코드에 유효한 경우 IOC_IN 설정됩니다.

출력 버퍼가 IOC_OUT 코드에 유효한 경우 O가 설정됩니다. 입력 버퍼와 출력 버퍼를 모두 사용하여 코드를 제어하여 I와 O를 모두 설정합니다.

IOC_VOID 코드에 대한 매개 변수가 없는 경우 V가 설정됩니다.

T는 IOCTL의 형식을 정의하는 2비트 수량입니다. 다음 값이 정의됩니다.

0 IOCTL은 FIONREADFIONBIO와 마찬가지로 표준 Unix IOCTL 코드입니다.

1 IOCTL은 일반 Windows 소켓 2 IOCTL 코드입니다. Windows 소켓 2에 대해 정의된 새 IOCTL 코드에는 T == 1이 있습니다.

2 IOCTL은 특정 주소 패밀리에만 적용됩니다.

3 IOCTL은 IOC_VENDOR 마찬가지로 특정 공급업체의 공급자에만 적용됩니다. 이 유형을 사용하면 공급업체 /주소 패밀리 매개 변수에 표시되는 공급업체 번호를 회사에 할당할 수 있습니다. 그런 다음, 공급업체는 IOCTL을 클리어링하우스에 등록하지 않고도 해당 공급업체와 관련된 새로운 IOCTL을 정의하여 공급업체의 유연성과 프라이버시를 제공할 수 있습니다.

공급업체/주소 패밀리 코드를 소유하는 공급업체를 정의하거나(T == 3인 경우) 코드가 적용되는 주소 패밀리를 포함하는 11비트 수량입니다(T == 2인 경우). Unix IOCTL 코드(T == 0)인 경우 이 매개 변수의 값은 Unix의 코드와 같습니다. 일반 Windows 소켓 2 IOCTL(T == 1)인 경우 이 매개 변수를 코드 매개 변수의 확장으로 사용하여 추가 코드 값을 제공할 수 있습니다.

코드 작업에 대한 특정 IOCTL 코드를 포함하는 16비트 수량입니다.

Unix IOCTL 코드

다음 Unix IOCTL 코드(명령)가 지원됩니다.

FIONBIO

소켓 에서 비 차단 모드를 사용하거나 사용하지 않도록 설정합니다. lpvInBuffer 매개 변수는 부호 없는 long(QoS)을 가리킵니다. 이 매개 변수는 비블로킹 모드를 사용하도록 설정하면 0이고 사용하지 않도록 설정하려면 0이 아닙니다. 소켓이 만들어지면 차단 모드에서 작동합니다(즉, 비블로킹 모드가 비활성화됨). 이는 BSD 소켓과 일치합니다.

WSAAsyncSelect 또는 WSAEventSelect 루틴은 자동으로 소켓을 비차단 모드로 설정합니다. WSAAsyncSelect 또는 WSAEventSelect가 소켓에서 실행된 경우 WSAIoctl을 사용하여 소켓을 다시 차단 모드로 설정하려는 시도는 WSAEINVAL에서 실패합니다. 소켓을 다시 차단 모드로 설정하려면 먼저 lEvent 매개 변수가 0인 WSAAsyncSelect를 호출하여 WSAAsyncSelect를 사용하지 않도록 설정하거나 lNetworkEvents 매개 변수가 0인 WSAEventSelect를 호출하여 WSAEventSelect를 사용하지 않도록 설정해야 합니다.

FIONREAD

소켓에서 원자성으로 읽을 수 있는 데이터의 양을 결정 합니다. lpvOutBuffer 매개 변수는 WSAIoctl에서 결과를 저장하는 부호 없는 long을 가리킵니다.

s 매개 변수에 전달된 소켓이 스트림 지향(예: SOCK_STREAM 형식)인 경우 FIONREAD는 단일 수신 작업에서 읽을 수 있는 총 데이터 양을 반환합니다. 이는 일반적으로 소켓에 대기 중인 총 데이터 양과 동일합니다(데이터 스트림은 바이트 지향이므로 보장되지 않음).

s 매개 변수에 전달된 소켓이 메시지 지향(예: SOCK_DGRAM 형식)인 경우 FIONREAD는 소켓에 큐에 대기 중인 첫 번째 데이터그램(메시지)의 크기가 아니라 읽을 수 있는 총 바이트 수를 반환합니다.

SIOCATMARK

모든 OOB 데이터를 읽었는지 여부를 확인합니다. 이는 모든 OOB 데이터(SO_OOBINLINE)의 인라인 수신을 위해 구성된 스트림 스타일의 소켓(예: SOCK_STREAM 형식)에만 적용됩니다. 읽을 OOB 데이터가 없으면 작업은 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환하고 소켓에서 수행된 다음 수신 작업은 표시 앞의 데이터의 일부 또는 전부를 검색합니다. 애플리케이션은 SIOCATMARK 작업을 사용하여 남아 있는지 여부를 확인해야 합니다. 긴급(대역 외) 데이터 앞에 일반 데이터가 있는 경우 순서대로 수신됩니다. (recv 작업은 동일한 호출에서 OOB 및 일반 데이터를 혼합하지 않습니다.) lpvOutBufferWSAIoctl에서 결과를 저장하는 BOOL을 가리킵니다.

Windows 소켓 2 명령

다음 Windows 소켓 2 명령이 지원됩니다.

SIO_ACQUIRE_PORT_RESERVATION(opcode 설정: I, T==3)

TCP 또는 UDP 포트 블록에 대한 런타임 예약을 요청합니다. 런타임 포트 예약의 경우 포트 풀은 예약이 부여된 소켓의 프로세스에서 예약을 사용해야 합니다. 런타임 포트 예약은 SIO_ACQUIRE_PORT_RESERVATION IOCTL이 호출된 소켓의 명 동안만 지속됩니다. 반면, CreatePersistentTcpPortReservation 또는 CreatePersistentUdpPortReservation 함수를 사용하여 만든 영구 포트 예약은 영구 예약을 가져올 수 있는 모든 프로세스에서 사용할 수 있습니다.

자세한 내용은 SIO_ACQUIRE_PORT_RESERVATION 참조를 참조하세요.

SIO_ACQUIRE_PORT_RESERVATION Windows Vista 이상 버전의 운영 체제에서 지원됩니다.

SIO_ADDRESS_LIST_CHANGE(opcode 설정: V, T==1)

애플리케이션이 바인딩할 수 있는 소켓 프로토콜 패밀리의 로컬 전송 주소 목록에서 변경 내용에 대한 알림을 받으려면 이 IOCTL이 완료되면 출력 정보가 제공되지 않습니다. 완료는 사용 가능한 로컬 주소 목록이 변경되었으며 SIO_ADDRESS_LIST_QUERY 통해 다시 쿼리되어야 했음을 나타냅니다.

애플리케이션이 겹치는 I/O를 사용하여 SIO_ADDRESS_LIST_CHANGE 요청을 완료하여 변경 알림을 받는 것으로 가정합니다(필수는 아님). 또는 SIO_ADDRESS_LIST_CHANGE IOCTL이 비차단 소켓에서 실행되고 겹치는 매개 변수(lpOverlapped/ lpCompletionRoutineNULL로 설정됨)가 없는 경우 WSAEWOULDBLOCK 오류와 함께 즉시 완료됩니다. 그런 다음 애플리케이션은 네트워크 이벤트 비트 마스크에 설정된 FD_ADDRESS_LIST_CHANGE 비트가 있는 WSAEventSelect 또는 WSAAsyncSelect 호출을 통해 주소 목록 변경 이벤트를 기다릴 수 있습니다.

SIO_ADDRESS_LIST_QUERY(opcode 설정: O, T==1)

애플리케이션이 바인딩할 수 있는 소켓 프로토콜 패밀리의 로컬 전송 주소 목록을 가져옵니다. 주소 목록은 주소 패밀리에 따라 다르며 일부 주소는 목록에서 제외됩니다.

참고

Windows 플러그 앤 플레이 환경에서 주소를 동적으로 추가하고 제거할 수 있습니다. 따라서 애플리케이션은 SIO_ADDRESS_LIST_QUERY 반환된 정보를 영구적으로 사용할 수 없습니다. 애플리케이션은 겹치는 I/O 또는 FD_ADDRESS_LIST_CHANGE 이벤트를 통해 알림을 제공하는 SIO_ADDRESS_LIST_CHANGE IOCTL을 통해 주소 변경 알림을 등록할 수 있습니다. 애플리케이션에 항상 현재 주소 목록 정보가 있음을 보장하기 위해 다음 작업 시퀀스를 사용할 수 있습니다.

  • IOCTL 문제 SIO_ADDRESS_LIST_CHANGE
  • IOCTL 문제 SIO_ADDRESS_LIST_QUERY
  • SIO_ADDRESS_LIST_CHANGE IOCTL이 주소 목록 변경의 적용을 알릴 때마다(겹치는 I/O를 통해 또는 FD_ADDRESS_LIST_CHANGE 이벤트를 신호하여) 전체 작업 순서를 반복해야 합니다.

자세한 내용은 SIO_ADDRESS_LIST_QUERY 참조를 참조하세요. SIO_ADDRESS_LIST_QUERY Windows 2000 이상에서 지원됩니다.

SIO_APPLY_TRANSPORT_SETTING(opcode 설정: I, T==3)

소켓에 전송 설정을 적용합니다. 적용되는 전송 설정은 lpvInBuffer 매개 변수에 전달된 TRANSPORT_SETTING_ID 기반으로 합니다.

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

전달된 TRANSPORT_SETTING_IDGuid 멤버가 REAL_TIME_NOTIFICATION_CAPABILITY 설정된 경우 Windows 스토어 앱에서 백그라운드 네트워크 알림을 수신하기 위해 ControlChannelTrigger 와 함께 사용되는 TCP 소켓에 대한 실시간 알림 설정을 적용하기 위한 요청입니다.

자세한 내용은 SIO_APPLY_TRANSPORT_SETTING 참조를 참조하세요. SIO_APPLY_TRANSPORT_SETTING Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_ASSOCIATE_HANDLE(opcode 설정: I, T==1)

이 소켓을 관련 인터페이스의 지정된 핸들과 연결합니다. 입력 버퍼에는 도우미 인터페이스의 매니페스트 상수(예: TH_NETDEV 및 TH_TAPI)에 해당하는 정수 값과 지정된 도우미 인터페이스의 핸들인 값 및 기타 필수 정보가 포함됩니다. 특정 도우미 인터페이스와 관련된 자세한 내용은 Winsock 별관 의 적절한 섹션을 참조하세요. 총 크기는 입력 버퍼 길이에 반영됩니다. 출력 버퍼가 필요하지 않습니다. WSAENOPROTOOPT 오류 코드는 이 IOCTL을 지원하지 않는 서비스 공급자에 대해 표시됩니다. 이 IOCTL에 연결된 핸들은 SIO_TRANSLATE_HANDLE 사용하여 검색할 수 있습니다.

예를 들어 특정 공급자가 (1) 소켓의 동작에 대한 많은 추가 컨트롤을 제공하고 (2) 컨트롤이 기존 Windows 소켓 함수 또는 향후 정의될 가능성이 있는 함수에 매핑되지 않을 정도로 공급자별 컨트롤을 제공하는 경우 도우미 인터페이스를 사용할 수 있습니다. 이 IOCTL 대신 COM(구성 요소 개체 모델)을 사용하여 소켓에서 지원될 수 있는 다른 인터페이스를 검색하고 추적하는 것이 좋습니다. 이 IOCTL은 COM을 사용할 수 없거나 다른 이유로 사용할 수 없는 시스템과의 (역방향) 호환성을 위해 존재합니다.

SIO_ASSOCIATE_PORT_RESERVATION(opcode 설정: I, T==3)

포트 예약 토큰으로 식별된 TCP 또는 UDP 포트 블록에 대한 영구 또는 런타임 예약과 소켓을 연결합니다. 소켓이 바인딩되기 전에 SIO_ASSOCIATE_PORT_RESERVATION IOCTL을 실행해야 합니다. 소켓이 바인딩되면 지정된 토큰으로 식별된 포트 예약에서 소켓에 할당된 포트가 선택됩니다. 지정된 예약에서 사용할 수 있는 포트가 없으면 바인딩 함수 호출이 실패합니다.

자세한 내용은 SIO_ASSOCIATE_PORT_RESERVATION 참조를 참조하세요.

SIO_ASSOCIATE_PORT_RESERVATION Windows Vista 이상 버전의 운영 체제에서 지원됩니다.

SIO_BASE_HANDLE(opcode 설정: O, T==1)

지정된 소켓에 대한 기본 서비스 공급자 핸들을 검색합니다. 반환된 값은 SOCKET입니다.

반환 값은 기본 서비스 공급자의 소켓 핸들이어야 하므로 계층화된 서비스 공급자는 이 IOCTL을 가로채지 않습니다.

출력 버퍼가 소켓 핸들에 충분히 크지 않거나( cbOutBufferSOCKET 크기보다 작음) lpvOutBuffer 매개 변수가 NULL 포인터인 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEFAULT를 반환합니다.

SIO_BASE_HANDLEMswsock.h 헤더 파일에 정의되며 Windows Vista 이상에서 지원됩니다.

SIO_BSP_HANDLE(opcode 설정: O, T==1)

WSASendMsg 함수에서 사용하는 소켓에 대한 기본 서비스 공급자 핸들을 검색합니다. 반환된 값은 SOCKET입니다.

이 Ioctl은 계층화된 서비스 공급자가 공급자가 WSASendMsg 함수를 가로채도록 하는 데 사용됩니다.

출력 버퍼가 소켓 핸들에 충분히 크지 않거나( cbOutBufferSOCKET 크기보다 작음) lpvOutBuffer 매개 변수가 NULL 포인터인 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEFAULT를 반환합니다.

SIO_BSP_HANDLEMswsock.h 헤더 파일에 정의되며 Windows Vista 이상에서 지원됩니다.

SIO_BSP_HANDLE_SELECT(opcode 설정: O, T==1)

select 함수에서 사용하는 소켓에 대한 기본 서비스 공급자 핸들을 검색 합니다. 반환된 값은 SOCKET입니다.

이 Ioctl은 계층화된 서비스 공급자가 공급자가 select 함수를 가로채도록 하는 데 사용됩니다.

출력 버퍼가 소켓 핸들에 충분히 크지 않거나( cbOutBufferSOCKET 크기보다 작음) lpvOutBuffer 매개 변수가 NULL 포인터인 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEFAULT를 반환합니다.

SIO_BSP_HANDLE_SELECTMswsock.h 헤더 파일에 정의되고 Windows Vista 이상에서 지원됩니다.

SIO_BSP_HANDLE_POLL(opcode 설정: O, T==1)

WSAPoll 함수에서 사용하는 소켓에 대한 기본 서비스 공급자 핸들을 검색합니다. lpOverlapped 매개 변수는 NULL 포인터여야 합니다. 반환된 값은 SOCKET입니다.

이 Ioctl은 계층화된 서비스 공급자가 공급자가 WSAPoll 함수를 가로채도록 하는 데 사용됩니다.

출력 버퍼가 소켓 핸들에 충분히 크지 않은 경우( cbOutBufferSOCKET 크기보다 작음), lpvOutBuffer 매개 변수가 NULL 포인터이거나 lpOverlapped 매개 변수가 NULL 포인터가 아닌 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEFAULT를 반환합니다.

SIO_BSP_HANDLE_POLLMswsock.h 헤더 파일에 정의되며 Windows Vista 이상에서 지원됩니다.

SIO_CHK_QOS(opcode 설정: I, O, T==3)

QoS 트래픽 특성에 대한 정보를 검색합니다. 흐름 설정과 RESV 메시지 수신 간의 전송 시스템에 대한 전환 단계(전환 단계에 대한 자세한 내용은 RSVP 서비스가 TC를 호출하는 방법 참조)에서 RSVP 흐름과 연결된 트래픽은 서비스 유형(BEST EFFORT, 제어된 로드 또는 GUARANTEED)에 따라 셰이핑됩니다. 자세한 내용은 플랫폼 SDK의 서비스 품질 섹션에서 SIO_CHK_QOS 사용을 참조하세요.

SIO_CPU_AFFINITY(opcode 설정: I, T==3)

포트 공유를 사용하도록 설정하고 표시 병렬 처리를 받습니다. 애플리케이션이 이 소켓 옵션을 사용하여 소켓을 다른 프로세서에 연결한 다음 소켓을 동일한 주소에 바인딩하는 경우 수신 표시는 RSS(수신측 크기 조정) 해시에 따라 소켓에 분산됩니다. RSS 설정은 변경되지 않으므로 지정된 흐름(로컬 엔드포인트, 원격 엔드포인트 쌍)은 항상 동일한 프로세서에 표시됩니다. 따라서 지정된 흐름에 속하는 모든 패킷이 동일한 소켓에 표시됩니다. 바인딩하기 전에 이 IOCTL을 호출해야 합니다. 그렇지 않으면 WSAEINVAL이 반환됩니다. 입력 버퍼는 USHORT 형식의 프로세서 인덱스(0 기반)입니다. IOCTL은 SO_REUSEADDR 및 SO_REUSE_MULTICASTPORT 호환되지 않습니다. UDP 소켓에 대해서만 지원됩니다.

참고

Windows SDK의 버전 10.0.19041.0(Windows 10, 버전 2004)을 대상으로 하는 경우 이름 SIO_CPU_AFFINITY 대신 값을 0x98000015 사용합니다.

SIO_ENABLE_CIRCULAR_QUEUEING(opcode 설정: V, T==1)

버퍼 큐 오버플로로 인해 새로 도착한 메시지를 삭제해서는 안 됨을 기본 메시지 지향 서비스 공급자에게 나타냅니다. 대신 새로 도착한 메시지를 수용하기 위해 큐에서 가장 오래된 메시지를 제거해야 합니다. 입력 및 출력 버퍼가 필요하지 않습니다. 이 IOCTL은 신뢰할 수 없는 메시지 지향 프로토콜과 연결된 소켓에만 유효합니다. WSAENOPROTOOPT 오류 코드는 이 IOCTL을 지원하지 않는 서비스 공급자에 대해 표시됩니다.

SIO_FIND_ROUTE(opcode 설정: O, T==1)

발급되면 이 IOCTL은 입력 버퍼에서 sockaddr 로 지정된 원격 주소로의 경로를 검색하도록 요청합니다. 주소가 로컬 캐시에 이미 있는 경우 해당 항목이 무효화됩니다. Novell의 IPX의 경우 이 호출은 지정된 원격 주소에 대해 네트워크를 쿼리하는 IPX GLT(GetLocalTarget)를 시작합니다.

SIO_FLUSH(opcode 설정: V, T==1)

이 소켓과 연결된 전송 큐의 현재 콘텐츠를 삭제합니다. 입력 및 출력 버퍼가 필요하지 않습니다. WSAENOPROTOOPT 오류 코드는 이 IOCTL을 지원하지 않는 서비스 공급자에 대해 표시됩니다.

SIO_GET_BROADCAST_ADDRESS(opcode 설정: O, T==1)

이 IOCTL은 출력 버퍼를 sendto/ WSASendTo와 함께 사용하기에 적합한 브로드캐스트 주소를 포함하는 sockaddr 구조로 채웁니다. 이 IOCTL은 IPv6 소켓에 대해 지원되지 않으며 WSAENOPROTOOPT 오류 코드를 반환합니다.

SIO_GET_EXTENSION_FUNCTION_POINTER(opcode 설정: O, I, T==1)

연결된 서비스 공급자가 지원하는 지정된 확장 함수에 대한 포인터를 검색합니다. 입력 버퍼에는 해당 확장 함수를 식별하는 값의 GUID(Globally Unique Identifier)가 포함되어 있습니다. 원하는 함수에 대한 포인터가 출력 버퍼에 반환됩니다. 확장 함수 식별자는 서비스 공급자 공급업체에 의해 설정되며 확장 함수 기능 및 의미 체계를 설명하는 공급업체 설명서에 포함되어야 합니다.

Windows TCP/IP 서비스 공급자가 지원하는 확장 함수의 GUID 값은 Mswsock.h 헤더 파일에 정의되어 있습니다. 이러한 GUID에 사용할 수 있는 값은 다음과 같습니다.

용어 설명
WSAID_ACCEPTEX
AcceptEx 확장 함수입니다.
WSAID_CONNECTEX
ConnectEx 확장 함수입니다.
WSAID_DISCONNECTEX
DisconnectEx 확장 함수입니다.
WSAID_GETACCEPTEXSOCKADDRS
GetAcceptExSockaddrs 확장 함수입니다.
WSAID_TRANSMITFILE
TransmitFile 확장 함수입니다.
WSAID_TRANSMITPACKETS
TransmitPackets 확장 함수입니다.
WSAID_WSARECVMSG
LPFN_WSARECVMSG(WSARecvMsg) 확장 함수입니다.
WSAID_WSASENDMSG
WSASendMsg 확장 함수입니다.

SIO_GET_GROUP_QOS(opcode 설정: O, I, T==1)

나중에 소켓과 함께 사용하도록 예약됩니다.

이 소켓이 속한 소켓 그룹과 연결된 QOS 구조를 검색합니다. 입력 버퍼는 선택 사항입니다. 일부 프로토콜(예: RSVP)을 사용하면 입력 버퍼를 사용하여 서비스 품질 요청을 한정할 수 있습니다. QOS 구조는 출력 버퍼에 복사됩니다. 이 소켓이 적절한 소켓 그룹에 속하지 않으면 반환된 QOS 구조의 SendFlowspecReceivingFlowspec 멤버가 NULL로 설정됩니다. WSAENOPROTOOPT 오류 코드는 서비스 품질을 지원하지 않는 서비스 공급자에 대해 표시됩니다.

SIO_GET_INTERFACE_LIST(opcode 설정: O, T==0)

구성된 IP 인터페이스 및 해당 매개 변수 목록을 INTERFACE_INFO 구조의 배열로 반환합니다.

참고

이 명령의 지원은 Windows 소켓 2 규격 TCP/IP 서비스 공급자에 대해 필수입니다.

lpvOutBuffer 매개 변수는 인터페이스에 대한 정보를 인터페이스의 유니캐스트 IP 주소에 대한 INTERFACE_INFO 구조의 배열로 저장할 버퍼를 가리킵니다. cbOutBuffer 매개 변수는 출력 버퍼의 길이를 지정합니다. 반환된 인터페이스 수( lpvOutBuffer 매개 변수가 가리키는 버퍼에 반환된 구조체 수)는 lpcbBytesReturned 매개 변수에서 반환된 출력 버퍼의 실제 길이에 따라 확인할 수 있습니다.

WSAIoctl 함수가 SIO_GET_INTERFACE_LIST 사용하여 호출되고 소켓 매개 변수 수준 멤버가 IPPROTO_IP 정의되지 않은 경우 WSAEINVAL이 반환됩니다. 출력 버퍼의 길이를 지정하는 cbOutBuffer 매개 변수가 너무 작으면 SIO_GET_INTERFACE_LISTWSAIoctl 함수에 대한 호출은 구성된 인터페이스 목록을 수신하면 WSAEFAULT를 반환합니다.

SIO_GET_INTERFACE_LIST Windows Me/98 및 sp4 이상에서 Windows NT 4.0에서 지원됩니다.

SIO_GET_INTERFACE_LIST_EX(opcode 설정: O, T==0)

나중에 소켓과 함께 사용하도록 예약됩니다.

구성된 IP 인터페이스 및 해당 매개 변수 목록을 INTERFACE_INFO_EX 구조의 배열로 반환합니다.

lpvOutBuffer 매개 변수는 인터페이스에 대한 정보를 인터페이스의 유니캐스트 IP 주소에 대한 INTERFACE_INFO_EX 구조의 배열로 저장할 버퍼를 가리킵니다. cbOutBuffer 매개 변수는 출력 버퍼의 길이를 지정합니다. 반환된 인터페이스 수( lpvOutBuffer에서 반환된 구조체 수)는 lpcbBytesReturned 매개 변수에 반환된 출력 버퍼의 실제 길이에 따라 확인할 수 있습니다.

SIO_GET_INTERFACE_LIST_EX 현재 Windows에서 지원되지 않습니다.

SIO_GET_QOS(opcode 설정: O, T==1)

나중에 소켓과 함께 사용하도록 예약됩니다. 소켓과 연결된 QOS 구조를 검색합니다. 입력 버퍼는 선택 사항입니다. 일부 프로토콜(예: RSVP)을 사용하면 입력 버퍼를 사용하여 서비스 품질 요청을 한정할 수 있습니다. QOS 구조는 출력 버퍼에 복사됩니다. 출력 버퍼의 크기는 전체 QOS 구조를 포함할 수 있을 만큼 커야 합니다. WSAENOPROTOOPT 오류 코드는 서비스 품질을 지원하지 않는 서비스 공급자에 대해 표시됩니다.

발신자는 소켓이 연결될 때까지 SIO_GET_QOS 호출할 수 없습니다.

수신기는 바인딩되는 즉시 SIO_GET_QOS 호출할 수 있습니다.

SIO_GET_TX_TIMESTAMP

TX(전송) 패킷에 대한 타임스탬프를 가져오는 데 사용되는 소켓 IOCTL입니다. 데이터그램 소켓에만 유효합니다.

SIO_GET_TX_TIMESTAMP 제어 코드는 소켓의 전송 타임스탬프 큐에서 전송 타임스탬프를 제거합니다. SIO_TIMESTAMPING 소켓 IOCTL을 사용하여 타임스탬프 수신을 먼저 사용하도록 설정합니다. 그런 다음, 다음 매개 변수를 사용하여 WSAIoctl(또는 WSPIoctl) 함수를 호출하여 ID별로 tx 타임스탬프를 검색합니다.

SIO_GET_TX_TIMESTAMP 경우 입력은 UINT32 타임스탬프 ID이고 출력은 UINT64 타임스탬프 값입니다. 성공하면 tx 타임스탬프를 사용할 수 있으며 가 반환됩니다. 전송 타임스탬프를 사용할 수 없는 경우 WSAGetLastErrorWSAEWOULDBLOCK을 반환합니다.

참고

TX 타임스탬프는 UDP_SEND_MSG_SIZE 통해 병합된 전송을 수행할 때 지원되지 않습니다.

Winsock 타임스탬프도 참조하세요.

SIO_IDEAL_SEND_BACKLOG_CHANGE(opcode 설정: V, T==0)

기본 연결에 대해 이상적인 ISB(보내기 백로그) 값이 변경되면 애플리케이션에 알릴 수 있습니다.

Windows 소켓을 사용하여 TCP 연결을 통해 데이터를 보낼 때 가장 높은 처리량을 달성하려면 TCP에서 충분한 양의 데이터를 미해결 상태로 유지하는 것이 중요합니다(전송되었지만 아직 승인되지 않음). TCP 연결에 대한 최상의 처리량을 달성하기 위해 미해결 데이터 양에 대한 이상적인 값을 ISB(이상적인 송신 백로그) 크기라고 합니다. ISB 값은 TCP 연결 및 수신자의 보급 수신 창(그리고 부분적으로 네트워크의 정체 양)의 대역폭 지연 곱의 함수입니다.

연결당 ISB 값은 Windows Server 2008의 TCP 프로토콜 구현, WINDOWS Vista SP1 이상 버전의 운영 체제에서 사용할 수 있습니다. SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL은 연결에 대해 ISB 값이 동적으로 변경될 때 애플리케이션에서 알림을 받는 데 사용할 수 있습니다.

자세한 내용은 SIO_IDEAL_SEND_BACKLOG_CHANGE 참조를 참조하세요.

SIO_IDEAL_SEND_BACKLOG_CHANGE Windows Server 2008, Windows Vista SP1 이상 버전의 운영 체제에서 지원됩니다.

SIO_IDEAL_SEND_BACKLOG_QUERY(opcode 설정: O, T==0)

기본 연결에 대한 이상적인 ISB(보내기 백로그) 값을 검색합니다.

Windows 소켓을 사용하여 TCP 연결을 통해 데이터를 보낼 때 가장 높은 처리량을 달성하려면 TCP에서 충분한 양의 데이터를 미해결 상태로 유지하는 것이 중요합니다(전송되었지만 아직 승인되지 않음). TCP 연결에 대한 최상의 처리량을 달성하기 위해 미해결 데이터 양에 대한 이상적인 값을 ISB(이상적인 송신 백로그) 크기라고 합니다. ISB 값은 TCP 연결 및 수신자의 보급 수신 창(그리고 부분적으로 네트워크의 정체 양)의 대역폭 지연 곱의 함수입니다.

연결당 ISB 값은 Windows Server 2008 이상의 TCP 프로토콜 구현에서 사용할 수 있습니다. 애플리케이션에서 SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL을 사용하여 연결에 대한 ISB 값을 쿼리할 수 있습니다.

자세한 내용은 SIO_IDEAL_SEND_BACKLOG_QUERY 참조를 참조하세요.

SIO_IDEAL_SEND_BACKLOG_QUERY Windows Server 2008, Windows Vista SP1 이상 버전의 운영 체제에서 지원됩니다.

SIO_KEEPALIVE_VALS(opcode 설정: I, T==3)

TCP 연결 유지 시간 제한 및 간격을 지정하는 TCP 연결 유지 옵션의 연결별 설정을 사용하거나 사용하지 않도록 설정합니다. 연결 유지 옵션에 대한 자세한 내용은 IETF 웹 사이트에서 사용할 수 있는 RFC 1122에 지정된 통신 계층인 인터넷 호스트 요구 사항에 대한 섹션 4.2.3.6을 참조하세요. (이 리소스는 영어로만 사용할 수 있습니다.)

SIO_KEEPALIVE_VALS 사용하여 연결 유지 프로브를 사용하거나 사용하지 않도록 설정하고 연결 유지 시간 제한 및 간격을 설정할 수 있습니다. keep-alive 시간 제한은 첫 번째 keep-alive 패킷이 전송될 때까지 작업 없이 시간 제한을 밀리초 단위로 지정합니다. keep-alive 간격은 승인이 수신되지 않은 경우 연속된 연결 유지 패킷이 전송되는 간격(밀리초)을 지정합니다.

SOL_SOCKET 소켓 옵션 중 하나인 SO_KEEPALIVE 옵션을 사용하여 연결에서 TCP 연결 유지를 사용하거나 사용하지 않도록 설정하고 이 옵션의 현재 상태를 쿼리할 수도 있습니다. 소켓에서 TCP 연결 유지를 사용할 수 있는지 여부를 쿼리하기 위해 SO_KEEPALIVE 옵션을 사용하여 getsockopt 함수를 호출할 수 있습니다. TCP 연결 유지를 사용하거나 사용하지 않도록 설정하려면 SO_KEEPALIVE 옵션을 사용하여 setsockopt 함수를 호출할 수 있습니다. SO_KEEPALIVE TCP keep-alive를 사용하도록 설정한 경우 SIO_KEEPALIVE_VALS사용하여 이러한 값을 변경하지 않는 한 기본 TCP 설정은 유지 시간 제한 및 간격에 사용됩니다.

자세한 내용은 SIO_KEEPALIVE_VALS 참조를 참조하세요. SIO_KEEPALIVE_VALS Windows 2000 이상에서 지원됩니다.

SIO_LOOPBACK_FAST_PATH(opcode 설정: I, T==3)

루프백 인터페이스에서 더 짧은 대기 시간 및 더 빠른 작업을 위해 TCP 소켓을 구성합니다. 이 IOCTL은 TCP/IP 스택이 이 소켓에서 루프백 작업에 특별한 빠른 경로를 사용할 것을 요청합니다. SIO_LOOPBACK_FAST_PATH IOCTL은 TCP 소켓에서만 사용할 수 있습니다. 이 IOCTL은 루프백 세션의 양쪽에서 사용해야 합니다. TCP 루프백 빠른 경로는 IPv4 또는 IPv6 루프백 인터페이스를 사용하여 지원됩니다. 기본적으로 SIO_LOOPBACK_FAST_PATH 사용하지 않도록 설정됩니다.

자세한 내용은 SIO_LOOPBACK_FAST_PATH 참조를 참조하세요. SIO_LOOPBACK_FAST_PATH Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_MULTIPOINT_LOOPBACK(opcode 설정: V, T==1)

멀티캐스트 세션의 로컬 컴퓨터(반드시 동일한 소켓이 아님)에서 애플리케이션에서 보낸 데이터를 루프백 인터페이스의 멀티캐스트 대상 그룹에 조인된 소켓에서 수신할지 여부를 제어합니다. TRUE 값을 지정하면 로컬 컴퓨터의 애플리케이션에서 보낸 멀티캐스트 데이터가 루프백 인터페이스의 수신 대기 소켓으로 전달됩니다. FALSE 값을 사용하면 로컬 컴퓨터의 애플리케이션에서 보낸 멀티캐스트 데이터가 루프백 인터페이스의 수신 대기 소켓으로 배달되지 않습니다. 기본적으로 SIO_MULTIPOINT_LOOPBACK 사용하도록 설정됩니다.

SIO_MULTICAST_SCOPE(opcode 설정: I, T==1)

멀티캐스트 전송이 발생할 scope 지정합니다. 범위는 다룰 라우트된 네트워크 세그먼트 수로 정의됩니다. scope 0이면 멀티캐스트 전송이 유선에 배치되지 않지만 로컬 호스트 내의 소켓에 전파될 수 있음을 나타냅니다. scope 값 1(기본값)은 전송이 유선에 배치되지만 라우터를 교차하지 않음을 나타냅니다. scope 값이 높을수록 교차할 수 있는 라우터 수가 결정됩니다. 이는 IP 멀티캐스팅의 TTL(Time-to-Live) 매개 변수에 해당합니다. 기본적으로 scope 1입니다.

SIO_QUERY_RSS_PROCESSOR_INFO(opcode 설정: O, T==1)

소켓과 RSS 프로세서 코어와 NUMA 노드 간의 연결을 쿼리합니다.

SIO_QUERY_RSS_PROCESSOR_INFO IOCTL은 PROCESSOR_NUMBER 및 NUMA 노드 ID를 포함하는 SOCKET_PROCESSOR_AFFINITY 구조를 반환합니다. 반환된 PROCESSOR_NUMBER 구조체에는 그룹 번호와 그룹 내의 상대 프로세서 번호가 포함됩니다.

자세한 내용은 SIO_QUERY_RSS_PROCESSOR_INFO 참조를 참조하세요. SIO_QUERY_RSS_PROCESSOR_INFO Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_QUERY_RSS_SCALABILITY_INFO(opcode 설정: O, T==3)

RSS(수신측 크기 조정) 기능에 대한 오프로드 인터페이스를 쿼리합니다. SIO_QUERY_RSS_SCALABILITY_INFO 대해 반환된 인수 구조체는 Mstcpip.h 헤더 파일에 정의된 RSS_SCALABILITY_INFO 구조체에 지정됩니다. 이 구조체는 다음과 같이 정의됩니다.

// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
   BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;

RssEnabled 멤버에 반환된 값은 하나 이상의 인터페이스에서 RSS를 사용할 수 있는지를 나타냅니다.

출력 버퍼가 RSS_SCALABILITY_INFO 구조체에 충분히 크지 않거나( cbOutBufferRSS_SCALABILITY_INFO 크기보다 작음) lpvOutBuffer 매개 변수가 NULL 포인터인 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEINVAL을 반환합니다.

여러 CPU가 단일 시스템 내에 있는 고속 네트워킹에서는 NDIS 5.1 및 이전 버전의 아키텍처가 프로토콜 처리를 단일 CPU로 수신하도록 제한하기 때문에 네트워킹 프로토콜 스택이 다중 CPU 시스템에서 잘 스케일링되는 기능이 억제됩니다. RSS(수신측 크기 조정)는 네트워크 어댑터의 네트워크 부하가 여러 CPU 간에 균형을 이루도록 하여 이 문제를 해결합니다.

SIO_QUERY_RSS_SCALABILITY_INFO Windows Vista 이상에서 지원됩니다.

SIO_QUERY_TRANSPORT_SETTING(opcode 설정: I, T==3)

소켓에서 전송 설정을 쿼리합니다. 쿼리되는 전송 설정은 lpvInBuffer 매개 변수에 전달된 TRANSPORT_SETTING_ID 기반으로 합니다.

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

TRANSPORT_SETTING_IDGuid 멤버가 REAL_TIME_NOTIFICATION_CAPABILITY 설정된 경우 ControlChannelTrigger와 함께 사용되는 TCP 소켓에 대한 실시간 알림 설정을 쿼리하여 Windows 스토어 앱에서 백그라운드 네트워크 알림을 수신하도록 요청합니다. WSAIoctl 또는 WSPIoctl 호출에 성공하면 이 IOCTL은 현재 상태 있는 REAL_TIME_NOTIFICATION_SETTING_OUTPUT 구조를 반환합니다.

자세한 내용은 SIO_QUERY_TRANSPORT_SETTING 참조를 참조하세요. SIO_QUERY_TRANSPORT_SETTING Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE(opcode 설정: O, T==3)

ALE(애플리케이션 계층 적용) 엔드포인트 핸들을 쿼리합니다.

WFP(Windows 필터링 플랫폼)는 네트워크 트래픽 검사 및 수정을 지원합니다. Windows Vista에서 WFP는 호스트 컴퓨터가 통신 엔드포인트인 시나리오에 중점을 둡니다. 그러나 Windows Server 2008에는 WFP 플랫폼을 활용하여 통과 트래픽을 검사하고 프록시하려는 에지 방화벽 구현이 있습니다. ISA(인터넷 보안 및 가속) 서버는 이러한 에지 디바이스의 예입니다.

기존 엔드포인트와 연결된 송신 경로에 인바운드 패킷을 삽입하는 기능이 필요할 수 있는 몇 가지 방화벽 시나리오가 있습니다. 대상 엔드포인트와 연결된 전송 계층 엔드포인트 핸들을 검색하는 메커니즘이 있어야 합니다. 엔드포인트를 만든 애플리케이션은 이러한 전송 계층 엔드포인트를 소유합니다. 이 IOCTL은 전송 계층 엔드포인트 핸들 매핑에 소켓 핸들을 제공하는 데 사용됩니다.

출력 버퍼가 엔드포인트 핸들에 충분히 크지 않거나( cbOutBufferUINT64 크기보다 작음) lpvOutBuffer 매개 변수가 NULL 포인터인 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEINVAL을 반환합니다.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE Windows Vista 이상에서 지원됩니다.

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT(opcode 설정: I, T==3)

WFP(Windows 필터링 플랫폼) 리디렉션 서비스에서 사용하는 리디렉션 레코드에 대한 리디렉션 컨텍스트를 쿼리합니다.

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL은 리디렉션된 소켓 연결에서 프록시 연결 추적을 제공하는 데 사용됩니다. 이 WFP 기능은 연결의 초기 리디렉션에서 대상에 대한 최종 연결로의 리디렉션 레코드를 쉽게 추적할 수 있습니다.

자세한 내용은 SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT 참조를 참조하세요. SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS(opcode 설정: I, T==3)

WFP(Windows 필터링 플랫폼) 리디렉션 서비스에서 사용하기 위해 허용되는 TCP/IP 연결에 대한 리디렉션 레코드를 쿼리합니다.

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL은 리디렉션된 소켓 연결에서 프록시 연결 추적을 제공하는 데 사용됩니다. 이 WFP 기능은 연결의 초기 리디렉션에서 대상에 대한 최종 연결로의 리디렉션 레코드를 쉽게 추적할 수 있습니다.

자세한 내용은 SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS 참조를 참조하세요. SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_RCVALL(opcode 설정: I, T==3)

소켓이 네트워크 인터페이스를 제한하여 전달하는 모든 IPv4 또는 IPv6 패킷을 수신할 수 있도록 합니다. WSAIoctl 함수에 전달된 소켓 핸들은 다음 중 하나여야 합니다.

  • 주소 패밀리가 AF_INET 설정되고, 소켓 유형이 SOCK_RAW 설정되고, 프로토콜이 IPPROTO_IP 설정된 IPv4 소켓입니다.
  • 주소 패밀리가 AF_INET6 설정되고, 소켓 유형이 SOCK_RAW 설정되고, 프로토콜이 IPPROTO_IPV6 설정된 IPv6 소켓입니다.

또한 소켓은 명시적 로컬 IPv4 또는 IPv6 인터페이스에 바인딩되어야 합니다. 즉, INADDR_ANY 또는 in6addr_any 바인딩할 수 없습니다.

Windows Server 2008 이하에서는 SIO_RCVALL IOCTL 설정이 네트워크 인터페이스에서 전송된 로컬 패킷을 캡처하지 않습니다. 여기에는 다른 인터페이스에서 수신되고 SIO_RCVALL IOCTL에 지정된 네트워크 인터페이스를 전달한 패킷이 포함되었습니다.

Windows 7 및 Windows Server 2008 R2에서는 네트워크 인터페이스에서 전송된 로컬 패킷도 캡처되도록 변경되었습니다. 여기에는 다른 인터페이스에서 받은 패킷이 포함된 다음 SIO_RCVALL IOCTL을 사용하여 소켓에 바인딩된 네트워크 인터페이스를 전달합니다.

이 IOCTL을 설정하려면 로컬 컴퓨터에 대한 관리자 권한이 필요합니다.

이 기능을 난잡한 모드라고도 합니다.

SIO_RCVALL IOCTL 옵션에 대한 가능한 값은 Mstcpip.h 헤더 파일에 정의된 RCVALL_VALUE 열거형에 지정됩니다. SIO_RCVALL 가능한 값은 다음과 같습니다.

용어 설명
RCVALL_OFF
소켓이 네트워크의 모든 IPv4 또는 IPv6 패킷을 수신하지 않도록 이 옵션을 사용하지 않도록 설정합니다.
RCVALL_ON
소켓이 네트워크의 모든 IPv4 또는 IPv6 패킷을 받도록 이 옵션을 사용하도록 설정합니다. 이 옵션은 NIC가 무차별 모드를 지원하는 경우 NIC(네트워크 인터페이스 카드)에서 무차별 모드를 사용하도록 설정합니다. 네트워크 허브가 있는 LAN 세그먼트에서 무차별 모드를 지원하는 NIC는 동일한 LAN 세그먼트에 있는 다른 컴퓨터 간의 트래픽을 포함하여 LAN의 모든 IPv4 또는 IPv6 트래픽을 캡처합니다. 캡처된 모든 패킷(소켓에 따라 IPv4 또는 IPv6)이 원시 소켓에 전달됩니다.
이 옵션은 인터페이스에서 다른 패킷(예: ARP, IPX 및 NetBEUI 패킷)을 캡처하지 않습니다.
Netmon은 네트워크 인터페이스에 대해 동일한 모드를 사용하지만 이 옵션을 사용하여 트래픽을 캡처하지는 않습니다.
RCVALL_SOCKETLEVELONLY
이 기능은 현재 구현되지 않으므로 이 옵션을 설정해도 아무 영향도 주지 않습니다.
RCVALL_IPLEVEL
IPv4 또는 IPv6 소켓이 네트워크의 IP 수준에서 모든 패킷을 받도록 이 옵션을 사용하도록 설정합니다. 이 옵션은 네트워크 인터페이스 카드 난잡한 모드를 사용하도록 설정하지 않습니다. 이 옵션은 IP 수준의 패킷 처리에만 영향을 줍니다. NIC는 구성된 유니캐스트 및 멀티캐스트 주소로 전달되는 패킷만 계속 받습니다. 그러나 이 옵션을 사용하도록 설정된 소켓은 특정 IP 주소로 전달되는 패킷뿐만 아니라 NIC가 수신하는 모든 IPv4 또는 IPv6 패킷을 수신합니다.
이 옵션은 인터페이스에서 받은 다른 패킷(예: ARP, IPX 및 NetBEUI 패킷)을 캡처하지 않습니다.

자세한 내용은 SIO_RCVALL 참조를 참조하세요.

SIO_RCVALL Windows 2000 이상에서 지원됩니다.

SIO_RCVALL_IGMPMCAST(opcode 설정: I, T==3)

소켓이 다른 멀티캐스트 IP 트래픽을 수신하지 않고 네트워크의 모든 IGMP 멀티캐스트 IP 트래픽을 수신할 수 있도록 합니다. WSAIoctl 함수에 전달된 소켓 핸들은 AF_INET 주소 패밀리, SOCK_RAW 소켓 유형 및 IPPROTO_IGMP 프로토콜이어야 합니다. 또한 소켓은 명시적 로컬 인터페이스에 바인딩되어야 합니다. 즉, INADDR_ANY 바인딩할 수 없습니다.

소켓이 바인딩되고 IOCTL이 설정되면 WSARecv 또는 recv 함수에 대한 호출은 지정된 인터페이스를 통과하는 멀티캐스트 IP 데이터그램을 반환합니다. 충분히 큰 버퍼를 제공해야 합니다. 이 IOCTL을 설정하려면 로컬 컴퓨터에 대한 관리자 권한이 필요합니다.

SIO_RCVALL_IGMPMCAST Windows 2000 이상에서 지원됩니다.

SIO_RCVALL_MCAST(opcode 설정: I, T==3)

소켓이 네트워크의 모든 멀티캐스트 IP 트래픽을 수신하도록 설정합니다(즉, 224.0.0.0에서 239.255.255.255 범위의 IP 주소로 향하는 모든 IP 패킷). WSAIoctl 함수에 전달된 소켓 핸들은 AF_INET 주소 패밀리, SOCK_RAW 소켓 유형 및 IPPROTO_UDP 프로토콜이어야 합니다. 또한 소켓은 명시적 로컬 인터페이스에 바인딩해야 합니다. 즉, INADDR_ANY 바인딩할 수 없습니다. 소켓은 포트 0에 바인딩되어야 합니다.

소켓이 바인딩되고 IOCTL이 설정되면 WSARecv 또는 recv 함수에 대한 호출은 지정된 인터페이스를 통과하는 멀티캐스트 IP 데이터그램을 반환합니다. 충분히 큰 버퍼를 제공해야 합니다. 이 IOCTL을 설정하려면 로컬 컴퓨터에 대한 관리자 권한이 필요합니다.

SIO_RCVALL_MCAST Windows 2000 이상에서 지원됩니다.

SIO_RELEASE_PORT_RESERVATION(opcode 설정: I, T==3)

TCP 또는 UDP 포트 블록에 대한 런타임 예약을 해제합니다. 해제할 런타임 예약은 SIO_ACQUIRE_PORT_RESERVATION IOCTL을 사용하여 발급 프로세스에서 가져와야 합니다.

자세한 내용은 SIO_RELEASE_PORT_RESERVATION 참조를 참조하세요.

SIO_RELEASE_PORT_RESERVATION Windows Vista 이상 버전의 운영 체제에서 지원됩니다.

SIO_ROUTING_INTERFACE_CHANGE(opcode 설정: I, T==1)

입력 버퍼의 원격 주소에 도달하는 데 사용해야 하는 라우팅 인터페이스 변경 알림을 받으려면( sockaddr 구조로 지정됨) 이 IOCTL이 완료되면 새 라우팅 인터페이스에 대한 출력 정보가 제공되지 않습니다. 완료는 지정된 대상에 대한 라우팅 인터페이스가 변경되었으며 SIO_ROUTING_INTERFACE_QUERY IOCTL을 사용하여 쿼리되어야 했음을 나타냅니다.

필수는 아니지만 애플리케이션이 겹치는 I/O를 사용하여 SIO_ROUTING_INTERFACE_CHANGE 요청 완료를 통해 라우팅 인터페이스 변경에 대한 알림을 받도록 가정합니다. 또는 lpOverlappedlpCompletionRoutine 매개 변수가 NULL로 설정된 비차단 소켓에서 SIO_ROUTING_INTERFACE_CHANGE IOCTL이 실행되면 즉시 반환이 완료되고 WSAEWOULDBLOCK이 오류로 반환되고 애플리케이션은 네트워크 이벤트 비트 마스크에 설정된 FD_ROUTING_INTERFACE_CHANGE 비트가 있는 WSAEventSelect 또는 WSAAsyncSelect에 대한 호출을 통해 변경 이벤트를 라우팅할 때까지 기다릴 수 있습니다.

라우팅 정보는 대부분의 경우 안정적으로 유지되므로 애플리케이션이 관심 있는 모든 대상에 대한 알림을 받기 위해 여러 미해결 IOCTL을 유지하도록 요구하고 서비스 공급자가 이러한 알림 요청을 추적하도록 하면 상당한 양의 시스템 리소스를 사용합니다. 입력 매개 변수의 의미를 확장하고 다음과 같이 서비스 공급자 요구 사항을 완화하여 이러한 상황을 방지할 수 있습니다.

  • 애플리케이션은 프로토콜 패밀리별 와일드카드 주소(사용 가능한 주소에 바인딩을 요청할 때 바인딩 호출에 사용되는 주소와 동일)를 지정하여 라우팅 변경에 대한 알림을 요청할 수 있습니다. 이렇게 하면 애플리케이션이 있는 모든 소켓 및 대상에 대해 하나의 미해결 SIO_ROUTING_INTERFACE_CHANGE 유지한 다음 , SIO_ROUTING_INTERFACE_QUERY 사용하여 실제 라우팅 정보를 가져올 수 있습니다.
  • 서비스 공급자는 애플리케이션이 SIO_ROUTING_INTERFACE_CHANGE 입력 버퍼에서 지정한 정보를 무시하고(애플리케이션이 와일드카드 주소를 지정한 것처럼) 라우팅 정보가 변경될 경우(입력 버퍼에 지정된 대상에 대한 경로뿐만 아니라) SIO_ROUTING_INTERFACE_CHANGE IOCTL 또는 신호 FD_ROUTING_INTERFACE_CHANGE 이벤트를 완료할 수 있습니다.

SIO_ROUTING_INTERFACE_QUERY(opcode 설정: I, O, T==1)

입력 버퍼에 지정된 원격 주소로 보내는 데 사용해야 하는 로컬 인터페이스( sockaddr 구조체로 표시됨)의 주소를 가져오려면( sockaddr로) 멀티캐스트 전송을 위한 기본 인터페이스의 주소를 가져오기 위해 입력 버퍼에 원격 멀티캐스트 주소를 제출할 수 있습니다. 어떤 경우든 반환된 인터페이스 주소는 애플리케이션이 후속 bind() 요청에서 사용할 수 있습니다.

경로는 변경될 수 있습니다. 따라서 애플리케이션은 SIO_ROUTING_INTERFACE_QUERY 반환된 정보를 영구적으로 사용할 수 없습니다. 애플리케이션은 겹치는 I/O 또는 FD_ROUTING_INTERFACE_CHANGE 이벤트를 통해 알림을 제공하는 SIO_ROUTING_INTERFACE_CHANGE IOCTL을 통해 라우팅 변경 알림을 등록할 수 있습니다. 애플리케이션에 항상 지정된 대상에 대한 현재 라우팅 인터페이스 정보가 있음을 보장하기 위해 다음 작업 시퀀스를 사용할 수 있습니다.

  • IOCTL SIO_ROUTING_INTERFACE_CHANGE 문제
  • IOCTL SIO_ROUTING_INTERFACE_QUERY 문제
  • SIO_ROUTING_INTERFACE_CHANGE IOCTL이 겹치는 I/O 또는 FD_ROUTING_INTERFACE_CHANGE 이벤트 신호를 통해 라우팅 변경의 적용을 알릴 때마다 전체 작업 순서를 반복해야 합니다.

출력 버퍼가 인터페이스 주소를 포함할 만큼 크지 않으면 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastErrorWSAEFAULT를 반환합니다. 이 경우 출력 버퍼의 필요한 크기가 lpcbBytesReturned 으로 반환됩니다. lpvInBuffer, lpvOutBuffer 또는 lpcbBytesReturned 매개 변수가 사용자 주소 공간의 유효한 부분에 완전히 포함되지 않은 경우에도 WSAEFAULT 오류 코드가 반환됩니다.

입력 버퍼에 지정된 대상 주소가 사용 가능한 인터페이스를 통해 연결할 수 없는 경우 이 IOCTL의 결과로 SOCKET_ERROR 반환되고 WSAGetLastError 는 모든 네트워크 연결이 끊어지면 WSAENETUNREACH 또는 WSAENETDOWN 을 반환합니다.

SIO_SET_COMPATIBILITY_MODE(opcode 설정: I, T==3)

네트워킹 스택이 Windows 버전에서 동작을 처리하는 기본 방법이 다를 수 있는 특정 동작을 처리하는 방법을 요청합니다. SIO_SET_COMPATIBILITY_MODE 인수 구조체는 Mswsockdef.h 헤더 파일에 정의된 WSA_COMPATIBILITY_MODE 구조체에 지정됩니다. 이 구조체는 다음과 같이 정의됩니다.

/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
    WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
    ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;

BehaviorId 멤버에 지정된 값은 요청된 동작을 나타냅니다. TargetOsVersion 멤버에 지정된 값은 동작에 대해 요청되는 Windows 버전을 나타냅니다.

BehaviorId 멤버는 Mswsockdef.h 헤더 파일에 정의된 WSA_COMPATIBILITY_BEHAVIOR_ID 열거형 형식의 값 중 하나일 수 있습니다. BehaviorId 멤버에 사용할 수 있는 값은 다음과 같습니다.

용어 Description
WsaBehaviorAll
이는 WSA_COMPATIBILITY_BEHAVIOR_ID 대해 정의된 가능한 모든 호환 동작을 요청하는 것과 같습니다.
WsaBehaviorReceiveBuffering
TargetOsVersion 멤버를 Windows Vista 이상의 값으로 설정하면 TCP 연결이 설정된 후에도 SO_RCVBUF 소켓 옵션을 사용하여 이 소켓의 TCP 수신 버퍼 크기 축소가 허용됩니다.
TargetOsVersion 멤버가 Windows Vista 이전 값으로 설정된 경우 연결 설정 후 SO_RCVBUF 소켓 옵션을 사용하여 이 소켓에서 TCP 수신 버퍼 크기로 축소할 수 없습니다.
WsaBehaviorAutoTuning
TargetOsVersion 멤버를 Windows Vista 이상의 값으로 설정하면 수신 창 자동 튜닝이 사용하도록 설정되고 TCP 창 배율 인수가 기본값 8에서 2로 줄어듭니다.
TargetOsVersion이 Windows Vista 이전 값으로 설정되면 수신 창 자동 튜닝이 사용하지 않도록 설정됩니다. TCP 창 크기 조정 옵션도 사용하지 않도록 설정되며 최대 실제 수신 창 크기는 65,535바이트로 제한됩니다. 연결이 설정되기 전에 65,535바이트보다 큰 값을 지정하는 이 소켓에서 SO_RCVBUF 소켓 옵션을 호출한 경우에도 연결에서 TCP 창 크기 조정 옵션을 협상할 수 없습니다.

자세한 내용은 SIO_SET_COMPATIBILITY_MODE 참조를 참조하세요.

SIO_SET_COMPATIBILITY_MODE Windows Vista 이상에서 지원됩니다.

SIO_SET_GROUP_QOS(opcode 설정: I, T==1)

예약되어 있습니다.

SIO_SET_PRIORITY_HINT(opcode 설정: I, T==3)

이 소켓의 트래픽을 특정 우선 순위로 처리하는 기본 전송 프로토콜에 대한 힌트를 제공합니다. lpvInBuffercbInBuffer가 sizeof(PRIORITY_HINT)로 설정된 PRIORITY_HINT 형식의 변수를 가리킵니다. lpvOutBuffercbOutBuffer 매개 변수는 각각 NULL 및 0이어야 합니다. Microsoft Windows TCP 구현은 Windows 10, 버전 1809(10.0; 빌드 17763) 이상: 요청된 우선 순위 값이 IoPriorityHintVeryLow로 설정된 경우 TCP는 소켓의 아웃바운드 트래픽 속도를 제어하기 위해 수정된 버전의 LEDBAT 알고리즘(RFC 6817에 정의됨)을 사용합니다. 인바운드 트래픽은 이 IOCTL의 영향을 받지 않습니다. LEDBAT는 청소기 알고리즘이며, 그 목표는 대기 시간을 낮게 유지하고 정상 우선 순위 트래픽이 있을 때 방해받지 않도록 하여 정상 우선 순위 트래픽에 부정적인 영향을 방지하는 것입니다.

RFC 6817도 참조하세요.

SIO_SET_PRIORITY_HINT Windows 10, 버전 1809(10.0; 빌드 17763) 이상.

SIO_SET_QOS(opcode 설정: I, T==1)

지정된 QOS 구조를 소켓과 연결합니다. 출력 버퍼가 필요하지 않습니다. QOS 구조는 입력 버퍼에서 가져옵니다. WSAENOPROTOOPT 오류 코드는 서비스 품질을 지원하지 않는 서비스 공급자에 대해 표시됩니다.

SIO_TCP_INITIAL_RTO(opcode 설정: I, T==3)

초기 RTO(재전송 시간 제한) 매개 변수를 구성하여 TCP 소켓의 초기(SYN/SYN+ACK) 재전송 특성을 제어합니다. 구성 매개 변수는 TCP_INITIAL_RTO_PARAMETERS 구조에 지정됩니다.

자세한 내용은 SIO_TCP_INITIAL_RTO 참조를 참조하세요. SIO_TCP_INITIAL_RTO Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_TIMESTAMPING

소켓 전송/수신 타임스탬프 수신을 구성하는 데 사용되는 소켓 IOCTL입니다. 데이터그램 소켓에만 유효합니다. SIO_TIMESTAMPING 입력 형식은 TIMESTAMPING_CONFIG 구조체입니다.

Winsock 타임스탬프도 참조하세요.

SIO_TRANSLATE_HANDLE(opcode 설정: I, O, T==1)

컴패니언 인터페이스의 컨텍스트에서 유효한 소켓 s 에 대한 해당 핸들을 가져오려면(예: TH_NETDEV 및 TH_TAPI). 다른 필요한 매개 변수와 함께 도우미 인터페이스를 식별하는 매니페스트 상수가 입력 버퍼에 지정됩니다. 해당 핸들은 이 함수가 완료되면 출력 버퍼에서 사용할 수 있습니다. 특정 도우미 인터페이스와 관련된 자세한 내용은 Winsock 별관 의 적절한 섹션을 참조하세요. WSAENOPROTOOPT 오류 코드는 지정된 도우미 인터페이스에 대해 이 IOCTL을 지원하지 않는 서비스 공급자에 대해 표시됩니다. 이 IOCTL은 SIO_TRANSLATE_HANDLE 사용하여 연결된 핸들을 검색합니다.

이 IOCTL 대신 COM(구성 요소 개체 모델)을 사용하여 소켓에서 지원될 수 있는 다른 인터페이스를 검색하고 추적하는 것이 좋습니다. 이 IOCTL은 COM을 사용할 수 없거나 다른 이유로 사용할 수 없는 시스템과 이전 버전과의 호환성을 위해 제공됩니다.

SIO_UDP_CONNRESET(opcode 설정: I, T==3)

Windows XP: UDP PORT_UNREACHABLE 메시지가 보고되는지 여부를 제어합니다. 보고를 사용하도록 설정하려면 TRUE 로 설정합니다. 보고를 사용하지 않도록 설정하려면 FALSE 로 설정합니다.

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS(opcode 설정: I, T==3)

리디렉션 레코드를 Windows WFP(필터링 플랫폼) 리디렉션 서비스에서 사용할 최종 대상에 연결하는 데 사용되는 새 TCP 소켓으로 설정합니다.

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL은 리디렉션된 소켓 연결에서 프록시된 연결 추적의 일부로 사용됩니다. 이 WFP 기능을 사용하면 대상에 대한 최종 연결에 대한 연결의 초기 리디렉션에서 리디렉션 레코드를 쉽게 추적할 수 있습니다.

자세한 내용은 SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS 참조를 참조하세요. SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS Windows 8, Windows Server 2012 이상에서 지원됩니다.

SIO_TCP_INFO(opcode 설정: I, O, T==3)

소켓에 대한 TCP 통계를 검색합니다. TCP 통계는 TCP_INFO_v0 구조로 제공됩니다.

GetPerTcpConnectionEStats 함수를 사용하여 TCP 통계를 검색하는 것과 달리, 이 컨트롤 코드로 TCP 통계를 검색할 때는 사용자 코드가 TCP 연결 테이블을 로드, 저장 및 필터링할 필요가 없으며 사용할 상승된 권한이 필요하지 않습니다.

자세한 내용은 SIO_TCP_INFO. SIO_TCP_INFO Windows 10 버전 1703, Windows Server 2016 이상에서 지원됩니다.

설명

Winsock Ioctls는 다양한 헤더 파일에 정의됩니다. 여기에는 Winsock2.h, Mswsock.hMstcpip.h 헤더 파일이 포함됩니다.

Windows Vista 이상용으로 릴리스된 Microsoft Windows SDK(소프트웨어 개발 키트)에서 헤더 파일의 organization 변경되었으며 Ws2def.h, Ws2ipdef.hMswsockdef.h 헤더 파일에도 여러 Winsock Ioctls가 정의됩니다. Ws2def.h 헤더 파일은 Winsock2.h 헤더 파일에 의해 자동으로 포함됩니다. Ws2ipdef.h 헤더 파일은 Ws2tcpip.h 헤더 파일에 의해 자동으로 포함됩니다. Mswsockdef.h 헤더 파일은 Mswsockdef.h 헤더 파일에 자동으로 포함됩니다.

요구 사항

요구 사항
헤더
Winsock2.h;
Mstcpip.h;
Mswsock.h;
Windows Vista, Windows Server 2008 및 Windows 7의 Mswsockdef.h(Mswsock.h 포함);
Windows Vista, Windows Server 2008 및 Windows 7의 Ws2def.h(Winsock2.h 포함);
Windows Vista, Windows Server 2008 및 Windows 7의 Ws2ipdef.h(Ws2tcpip.h 포함)