다음을 통해 공유


설명자 할당

Windows Sockets 서비스 공급자는 소켓을 IFS(설치 가능한 파일 시스템) 개체로 구현하는 것이 좋지만, Winsock 아키텍처는 소켓 핸들이 IFS 개체가 아닌 서비스 공급자를 수용합니다. IFS 핸들이 있는 공급자는 WSAPROTOCOL_INFO 구조의 XP1_IFS_HANDLES 특성 비트를 통해 이를 나타냅니다. (참고: XP1_IFS_HANDLES 특성 비트는 API 사양의 릴리스 2.0.8에 포함되지 않았지만 이후 errata 메커니즘을 통해 추가되었습니다.) Winsock SPI 클라이언트는 ReadFileWriteFile과 같은 표준 Windows I/O 기능과 함께 이러한 설명자를 사용하여 소켓 설명자가 IFS 핸들인 공급자를 활용할 수 있습니다.

IFS 공급자가 새 소켓 설명자를 만들 때마다 Windows 소켓 SPI 클라이언트에 새 핸들을 제공하기 전에 공급자가 WPUModifyIFSHandle 을 호출해야 합니다. 이 함수는 공급자 식별자와 공급자의 제안된 IFS 핸들을 입력으로 사용하고 수정된 핸들을 반환합니다. IFS 공급자는 수정된 핸들만 클라이언트에 제공해야 하며 클라이언트의 모든 요청은 이 수정된 핸들만 참조합니다. 수정된 핸들은 운영 체제와 관련된 한 제안된 핸들과 구별할 수 없습니다. 따라서 대부분의 경우 서비스 공급자는 모든 내부 처리에서 수정된 핸들만 사용하도록 선택합니다. 이 수정 함수의 목적은 Ws2_32.dll 지정된 소켓과 연결된 서비스 공급자를 식별하는 프로세스를 크게 간소화할 수 있도록 하는 것입니다.

IFS 핸들을 반환하지 않는 공급자는 WPUCreateSocketHandle 호출을 통해 Ws2_32.dll 유효한 핸들을 가져와야 합니다. nonIFS 공급자는 클라이언트에 Windows 소켓 2.DLL 제공 핸들만 제공해야 하며 클라이언트의 모든 요청은 이러한 핸들만 참조합니다. 서비스 공급자 구현자의 편의를 위해 WPUCreateSocketHandle 의 공급자가 제공하는 입력 매개 변수 중 하나는 DWORD 컨텍스트 값입니다. Ws2_32.dll 이 컨텍스트 값을 할당된 소켓 핸들과 연결하고 서비스 공급자가 WPUQuerySocketHandleContext 호출을 통해 언제든지 컨텍스트 값을 검색할 수 있도록 합니다. 이 컨텍스트 값의 일반적인 용도는 소켓 상태 정보를 저장하는 데 사용되는 서비스 공급자 유지 관리 데이터 구조에 대한 포인터를 저장하는 것입니다.