WSPDuplicateSocket
9/8/2008
Essa função retorna uma estrutura que pode ser usada para criar um novo descritor Soquete para um Soquete compartilhada.
Observação
O provedor serviço Soquetes do Windows incluída no Windows Embedded CE não suporte Soquete compartilhamento.No entanto, você pode criar um personalizado provedor serviço que oferece suporte a soquetes compartilhados.
Syntax
int WSPDuplicateSocket(
SOCKET s,
DWORD dwProcessId,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPINT lpErrno
);
Parameters
- s
[no] Especifica o local descritor Soquete.
- dwProcessId
[no] Especifica o identificador do processo de destino para os quais o Soquete compartilhado será usado.
- lpProtocolInfo
[out] Ponteiro para uma reserva alocado pelo cliente que é grande o suficiente para conter um WSAPROTOCOL_INFOW estrutura. Provedor de serviço copia o conteúdo estrutura informações protocolo para esta reserva.
- lpErrno
[out] Ponteiro para o código de erro.
Return Value
Essa função sempre retornará SOCKET_ERROR e define lpErrno Para WSASYSCALLFAILURE Em Windows Embedded CE.
Remarks
Chama um processo origem WSPDuplicateSocket Para obter um especiais WSAPROTOCOL_INFOW estrutura. Ele usa alguns entre processos mecanismo de comunicação (comunicação entre processos) para transmitir o conteúdo dessa estrutura para um processo destino, que em Ativar utiliza em um chamar para WSPSocket Para obter um descritor para a Soquete duplicado.
Observação
O especiais WSAPROTOCOL_INFOW estrutura somente pode ser usada uma vez pelo processo de destino.
É responsabilidade do provedor de serviços para executar as operações são necessárias no contexto de processo origem e para criar um WSAPROTOCOL_INFOW estrutura que será reconhecida quando ela aparecer posteriormente como um parâmetro para WSPSocket No contexto de processo destino. O provedor deve retornar um descritor Soquete que referencia um comum subjacente Soquete. O dwProviderReserved membro das WSAPROTOCOL_INFOW estrutura está disponível para do o provedor de serviços use e pode ser usado para armazenar qualquer útil informações contexto, incluindo um identificador duplicado.
Quando novos descritores Soquete são alocados, provedores não-IFS devem chamar WPUCreateSocketHandle.
A seguinte tabela mostra um cenário possível para estabelecer e usando um Soquete compartilhada em um modo para entrega.
Processo de origem | Comunicação entre processos | Processo de destino |
---|---|---|
1. WSPSocket, WSPConnect. |
||
2. Solicitações destino processo identificador. |
... |
|
3. Recebe processo identificador solicitação e respondem. |
||
4. Recebe processo identificador. |
… |
|
5. Chamadas WSPDuplicateSocket Para get um especiais WSAPROTOCOL_INFOW estrutura. |
||
6. Envia WSAPROTOCOL_INFOW estrutura para destino. |
||
… |
7. Recebe WSAPROTOCOL_INFOW estrutura. |
|
8. Chamadas WSPSocket Para criar descritor Soquete compartilhada. |
||
10. WSPCloseSocket |
9. Usa compartilhada Soquete para a troca dados. |
Os descritores que fazem referência um Soquete compartilhada podem ser usados independentemente E/S à medida que se refere ao. No entanto, a interface Soquetes do Windows não implementar qualquer tipo de controle de acesso, portanto, é up to os processos envolvidos para coordenar suas operações em um Soquete compartilhada. Um uso típico para Soquetes compartilhados é ter um processo que é responsável pela criação soquetes e estabelecer conexões, entregar soquetes para outros processos que são responsáveis troca informações.
Como o que é duplicado são os descritores Soquete e não o subjacente Soquete, todos os estados associado com um Soquete é mantidos em comum entre todos os descritores. Exemplo de um WSPSetSockOpt operação realizada usando um descritor é subseqüentemente visível usando um WSPGetSockOpt De qualquer ou todos os descritores. Um processo pode chamar WSPClosesocket Em um Soquete duplicado e o descritor irão se tornam desalocadas. O subjacente Soquete, no entanto, permanecerá aberto até WSPClosesocket é chamado pelo último restantes descritor.
A notificação em soquetes compartilhadas é assunto para as restrições usuais de WSPEventSelect. Emitir um dessas chamadas usando qualquer um dos descritores de compartilhada cancela qualquer registro evento anterior para o Soquete, regardless of que descritor foi usado para fazer esse registro. Assim, de exemplo, um Soquete compartilhada não é possível entregar eventos FD_READ para um processo e os eventos FD_WRITE para processo B. Para situações quando Tal coordenação forte é exigido, é recomendável que os desenvolvedores usam segmentos instead of separar processos.
Uma em camadas provedor serviço fornece uma implementação desta função, mas também é um cliente desta função quando ele chama WSPDuplicateSocket do próximo camada em encadear o provedor. Aplicar algumas considerações especiais para do esta função lpProtocolInfo parâmetro como ele é propagado para baixo através as camadas de encadear o provedor.
Se o próximo camada em encadear o provedor é outra camada e quando o próximo da camada WSPDuplicateSocket é chamado, esta camada deve transmitir para o próximo camada um lpProtocolInfo que faz referência a mesma mantidos inalterados WSAPROTOCOL_INFOW estrutura com as mesmo informações encadear não modificada. No entanto, se o próximo camada é o protocolo de base (that is, o elemento último no encadear), essa camada executa uma substituição quando chamado do provedor de de base WSPDuplicateSocket. Neste do maiúsculas e minúsculas, o provedor de base WSAPROTOCOL_INFOW estrutura deve ser relacionado pela lpProtocolInfo parâmetro.
Um beneficiar vital dessa diretiva é que serviço de base provedores não precisa estar ciente de cadeias provedor. Essa mesma diretiva se aplica quando Propagando um WSAPROTOCOL_INFOW estrutura através uma em camadas seqüência das outras funções such as WSPAddressToString, WSPStartup, WSPSocket, ou WSPStringToAddress.
Requirements
Header | ws2spi.h |
Library | Ws2.lib |
Windows Embedded CE | Windows CE .NET 4.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |