다음을 통해 공유


SPI의 공유 소켓

Windows 소켓의 프로세스 간 소켓 공유는 다음과 같이 구현됩니다. 소스 프로세스는 WSPDuplicateSocket 호출하여 특수 WSAPROTOCOL_INFO 구조를 가져옵니다. IPC(일부 프로세스 간 통신) 메커니즘을 사용하여 이 구조의 내용을 대상 프로세스에 전달합니다. 그런 다음 대상 프로세스는 WSPSocket호출에서 WSAPROTOCOL_INFO 구조를 사용합니다. 이 함수에서 반환하는 소켓 설명자는 기본 소켓에 대한 추가 소켓 설명자가 되므로 공유됩니다.

원본 프로세스 컨텍스트에서 필요한 작업을 수행하고 이후에 대상 프로세스의 컨텍스트에서 WSPSocket매개 변수로 나타날 때 인식되는 WSAPROTOCOL_INFO 구조를 만드는 것은 서비스 공급자의 책임입니다. WSAPROTOCOL_INFO 구조의 멤버를 dwProviderReserved는 서비스 공급자가 사용할 수 있으며 중복 핸들을 비롯한 유용한 컨텍스트 정보를 저장하는 데 사용할 수 있습니다.

이 메커니즘은 단일 스레드 및 선점 다중 스레드 버전의 Windows 둘 다에 적합하도록 설계되었습니다. 그러나 소켓 설명자는 모든 프로세스 스레드에서 유효하므로 WSPDuplicateSocket 함수를 사용하지 않고 지정된 프로세스의 스레드 간에 소켓을 공유할 수 있습니다.

설명자 할당 섹션에 설명된 대로 새 소켓 설명자가 할당되면 IFS 공급자는 WPUModifyIFSHandle 호출해야 하고 비 IFS 공급자는 WPUCreateSocketHandle호출해야 합니다.

다음 표에는 핸드오프 모드에서 공유 소켓을 설정하고 사용하는 시나리오가 나와 있습니다.

원본 프로세스 IPC 대상 프로세스
1) WSPSocket, WSPConnect
2) 대상 프로세스 식별자를 요청합니다. ==>
3) 프로세스 식별자 요청을 수신하고 응답합니다.
4) 프로세스 식별자를 받습니다. <==
5) 특별한 WSAPROTOCOL_INFO 구조를 얻기 위해 WSPDuplicateSocket호출합니다.
6) 대상으로 WSAPROTOCOL_INFO 구조를 보냅니다.
==> 7) WSAPROTOCOL_INFO 구조를 받습니다.
8) WSPSocket호출하여 공유 소켓 설명자를 만듭니다.
9)데이터 교환에 공유 소켓을 사용합니다.
10) WSPClosesocket <==