WPUCreateSocketHandle 함수(ws2spi.h)
WPUCreateSocketHandle 함수는 새 소켓 핸들을 만듭니다.
구문
SOCKET WPUCreateSocketHandle(
[in] DWORD dwCatalogEntryId,
[in] DWORD_PTR dwContext,
[out] LPINT lpErrno
);
매개 변수
[in] dwCatalogEntryId
호출 서비스 공급자를 식별하는 설명자입니다.
[in] dwContext
새 소켓 핸들과 연결할 컨텍스트 값입니다.
[out] lpErrno
오류 코드에 대한 포인터입니다.
반환 값
오류가 발생하지 않으면 WPUCreateSocketHandle 은 새 소켓 핸들을 반환합니다. 그렇지 않으면 INVALID_SOCKET 반환되고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.
오류 코드 | 의미 |
---|---|
새 소켓 핸들을 만드는 데 사용할 수 있는 버퍼가 충분하지 않습니다. |
설명
WPUCreateSocketHandle 함수는 지정된 공급자에 대한 새 소켓 핸들을 만듭니다. WPUCreateSocketHandle에서 만든 핸들은 실제 파일 시스템 핸들과 구별할 수 없습니다. 이것은 두 가지 측면에서 중요합니다. 먼저 Windows 소켓 2 아키텍처는 파일 시스템 함수 ReadFile 및 WriteFile 을 이 서비스 공급자의 LPWSPRecv 및 LPWSPSend 함수로 각각 리디렉션합니다. 둘째, 완료 포트를 지원하는 운영 체제에서 Windows Sockets 2 아키텍처는 완성 포트를 소켓 핸들과 연결하고 이를 사용하여 겹치는 I/O 완성을 보고할 수 있도록 지원합니다.
이 절차는 계층화된 서비스 공급자에게 특히 중요합니다. 계층화된 서비스 공급자는 WPUModifyIFSHandle 대신 이 절차를 사용하여 클라이언트에 노출하는 소켓 핸들을 만들 수 있습니다. 이 절차를 사용할 경우 소켓과 관련된 모든 I/O 요청이 이 서비스 공급자를 통과하도록 보장할 수 있다는 장점이 있습니다. 클라이언트가 소켓이 파일 시스템 핸들이라고 가정하고 파일 시스템 함수 ReadFile 및 WriteFile 을 호출하는 경우에도 마찬가지입니다(이 가정에 대한 성능 저하를 지불함).
모든 I/O가 이 계층을 통과하도록 보장하는 것은 실제 I/O 작업 전후에 I/O 스트림을 처리해야 하는 계층에 대한 요구 사항입니다. WPUCreateSocketHandle을 사용하여 소켓 핸들을 만들고 WSPStartup 시 적절한 서비스 공급자 인터페이스 프로시저 디스패치 테이블을 지정하면 계층이 각 I/O 작업을 시작하는 데 참여할 수 있습니다. 클라이언트가 겹치는 I/O 작업을 요청하는 경우 이 서비스 공급자 계층은 일반적으로 I/O 완료 알림의 경로로 들어가도록 정렬해야 합니다.
이것이 사실인 이유를 확인하려면 클라이언트가 겹치는 I/O 완료 알림을 위해 완료 포트를 소켓 핸들과 연결하면 어떻게 되는지 고려합니다. 포트는 다음 계층의 소켓 핸들이 아니라 이 계층에서 노출하는 소켓 핸들과 연결됩니다. 이 계층에서 완료 포트가 연결되어 있는지 또는 포트가 무엇인지 확인할 수 있는 방법은 없습니다. 이 계층은 다음 계층의 I/O 작업을 호출할 때 다음 계층의 소켓 핸들을 사용합니다. 다음 계층의 소켓 핸들은 동일한 완료 포트 연결을 갖지 않습니다. 추가 도움이 없으면 클라이언트의 예상 완료 포트 알림이 발생하지 않습니다.
계층화된 서비스 공급자가 이를 관리하는 일반적인 방법은 다음 계층에서 I/O 작업을 호출할 때 다른 겹치는 I/O 구조와 서로 다른 겹치는 I/O 매개 변수를 대체하는 것입니다. 대체 겹치는 I/O 구조체는 클라이언트의 저장된 겹치는 구조체 및 매개 변수를 참조합니다. 다음 계층의 호출은 콜백 알림을 설정합니다. 콜백 알림이 발생하면 이 계층은 원하는 사후 처리를 수행하고, 클라이언트를 대신하여 저장된 겹치는 I/O 정보를 검색하고, 대체 구조를 삭제하고, 클라이언트에 적절한 완료 알림을 전달합니다.
요구 사항
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | ws2spi.h |