Compartilhar via


WSPDuplicateSocket

Windows Mobile SupportedWindows Embedded CE Supported

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

See Also

Reference

WPUCreateSocketHandle