WSPEventSelect

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa função especifica um objeto evento ser associado com o conjunto de eventos rede fornecido.

Syntax

int WSPEventSelect(
  SOCKET s,
  WSAEVENT hEventObject,
  long lNetworkEvents,
  LPINT lpErrno 
);

Parameters

  • s
    [no] Descritor identificando a Soquete.
  • hEventObject
    [no] Manipular identificando o objeto evento ser associado com o conjunto de eventos rede fornecido.
  • lNetworkEvents
    [no] Máscara de bits que especifica a combinação de eventos rede no qual o cliente Windows Sockets SPI tem interesse.
  • lpErrno
    [out] Ponteiro para o código de erro.

Return Value

O valor de retorno será zero se especificação do cliente de Windows Sockets SPI de eventos de rede e de associado foi evento objeto bem-sucedido. Caso contrário, o valor retornado SOCKET_ERROR e um número de erro específica está disponível em lpErrno.

A seguinte tabela mostra os códigos de erro possível.

Valor de erro Descrição

WSAENETDOWN

falha no subsistema de rede.

WSAEINVAL

Indica que um dos parâmetros especificados foi inválido, ou o especificado Soquete está em um inválido estado.

WSAEINPROGRESS

Bloquear chamar Soquetes do Windows é em andamento ou o serviço provedor ainda é processamento um função callback.

WSAENOTSOCK

O descritor não é um Soquete.

Remarks

Essa função é usada para especificar um objeto evento, hEventObject, ser associado com os eventos selecionados rede, lNetworkEvents. O Soquete para a qual um objeto evento é especificado é identificado por s. O objeto evento é definido quando qualquer uma das ocorrer eventos de rede indicado.

Essa função é a única função que faz com que rede atividade e erros ser gravada e recuperável através WSPEnumNetworkEvents. Consulte a descrição de WSPSelect Para localizar fora como essa função relata erros e rede atividade.

Essa função automaticamente conjuntos Soquete s Para de não bloqueio modo, regardless of o valor de lNetworkEvents.

A seguinte tabela mostra os valores que podem ser usados para construção de lNetworkEvents parâmetro usando a operador bit a bit OR.

Valor Descrição

FD_READ

Emite notificação de preparação para leitura.

FD_WRITE

Emite notificação de preparação para gravação.

FD_OOB

Emite notificação da chegada de dados OOB.

FD_ACCEPT

Problemas notificação de de entrada Conexões.

FD_CONNECT

Emite notificação da conexão concluída.

FD_CLOSE

Emite notificação de feriado Soquete.

INTERFACE_CHANGE FD_ROUTING_

Problemas notificação de roteamento alterações interface para o destination(s) especificado.

LIST_CHANGE FD_ADDRESS_

Problemas notificação do local endereço lista altera para família de endereços do Soquete.

Emitir um WSPEventSelect Para um Soquete cancela qualquer anterior WSPEventSelect para o mesmo Soquete e limpa o registro evento rede interna. De exemplo, para associar um objeto evento com lendo e gravando eventos rede, o cliente Windows Sockets SPI deve chamar WSPEventSelect Com o FD_READ e FD_WRITE, conforme o seguinte amostra de código.

rc = WSPEventSelect(s, hEventObject, FD_READ|FD_WRITE);

Não é possível especificar evento diferentes objetos de rede diferentes eventos. O seguinte amostra de código não irá trabalho; chamar o segundo será cancelar os efeitos do evento rede FD_WRITE primeiro e somente será associado com hEventObject2.

rc = WSPEventSelect(s, hEventObject1, FD_READ);
rc = WSPEventSelect(s, hEventObject2, FD_WRITE);   //bad

Para cancelar a associação e seleção de rede eventos em um Soquete, lNetworkEvents Deve ser definido para zero, no qual maiúsculas e minúsculas o hEventObject parâmetro será ignorado.

rc = WSPEventSelect(s, hEventObject, 0);

Fechar um Soquete com WSPCloseSocket também cancela a associação e seleção de eventos especificados na rede WSPEventSelect Para o Soquete. O cliente Windows Sockets SPI, no entanto, ainda deve chamar WSACloseEvent Para explicitamente fechar o objeto evento e livre quaisquer recursos.

Porque um (AceitoWSPAccept) Soquete tem as mesmas propriedades como a Soquete de escuta usado para aceitá-la, qualquer WSPEventSelect associação e rede seleção eventos definidos para a escuta aplicar Soquete para o Soquete aceito. De exemplo, se uma escuta Soquete tem WSPEventSelect associação de hEventOject Com FD_ACCEPT, FD_READ e FD_WRITE, em seguida, qualquer Soquete aceito em que Soquete escuta também terá eventos rede FD_ACCEPT, FD_READ e FD_WRITE associado com o mesmo hEventObject. Se um diferente hEventObject ou eventos rede são necessárias, o cliente Windows Sockets SPI deve chamar WSPEventSelect, passando o Soquete aceita e as novas informações.

Ter registrado com êxito a ocorrência do evento rede e sinalizado o associado objeto evento, nenhuma ação adicional é seguidas para esse evento rede até que o cliente Windows Sockets SPI torna a chamada de função ou implicitamente reativa a configuração do evento que rede e a sinalização do associado objeto evento.

Evento de rede Habilitar novamente função

FD_READ

WSPRecv Ou WSPRecvFrom

FD_WRITE

WSPSend Ou WSPSendTo

FD_OOB

WSPRecv Ou WSPRecvFrom

FD_ACCEPT

WSPAccept a menos que o código de erro retornado WSATRY_AGAIN indicando que a função condição retornado CF_DEFER

FD_CONNECT

Nenhum

FD_CLOSE

Nenhum

FD_ROUTING_INTERFACE_CHANGE

WSPIoctl Com o comando SIO_ROUTING_INTERFACE_CHANGE

FD_ADDRESS_LIST_CHANGE

WSPIoctl Com o comando SIO_ADDRESS_LIST_CHANGE

Qualquer chamar para a rotina re-Enabling, mesmo um que falhar, resulta em habilitar novamente de gravação e a sinalização para o evento rede relevantes e objeto evento, respectivamente.

Para FD_READ, FD_OOB, FD_ACCEPT rede eventos, gravação evento rede e a Sinalização objeto evento são nível-disparado. Isso significa que se a rotina re-Enabling for chamado e a condição rede relevante é ainda válido depois de chamar, o evento rede é registrado e o associado é objeto evento sinalizado. Isso permite que um cliente Windows Sockets SPI ser Event-driven e não se preocupe com a quantidade de dados que chegam em qualquer um tempo. Isso é ilustrado a seguinte seqüência.

  • Provedor de serviço recebe 100 bytes de dados em Soquete s, registra o evento rede FD_READ e sinais de associado objeto evento.
  • Os problemas cliente SPI Soquetes do Windows WSPRecv(s, buffptr, 50, 0) para ler 50 bytes.
  • O provedor serviço registra o evento rede FD_READ e sinais de associado objeto evento novamente porque ainda há dados serem ler.

Com essas semântica, um cliente Windows Sockets SPI não precisa ler disponível todos os dados em resposta a uma rede eventa FD_READ única WSPRecv Em resposta a cada rede FD_READ evento é apropriado.

Os eventos FD_ROUTING_INTERFACE_CHANGE e FD_ADDRESS_LIST_CHANGE são considerados borda disparada assim. Uma mensagem será postada exatamente uma vez quando uma alteração ocorre AFTER the Windows Socket SPI cliente solicitou a notificação pela emissão WSAIoctl Com SIO_ROUTING_INTERFACE_CHANGE ou SIO_ADDRESS_LIST_CHANGE correspondentemente. Outras mensagens não estarão próxima até que o cliente SPI reissues o IOCTL e Outra alteração é detectada desde o IOCTL foi emitido.

Se um evento rede já tiver ocorrido quando o cliente Windows Sockets SPI chama WSPEventSelect ou quando a função re-Enabling é chamado e, em seguida, um evento rede é registrado e o associado objeto evento está sinalizado como apropriado. Isso é ilustrado na seguinte seqüência.

  1. Chama um cliente Windows Sockets SPI WSPListen.
  2. Uma solicitação de conexão é recebida, mas ainda não foram aceitas.
  3. O cliente Windows Sockets SPI chama WSPEventSelect especificando que ela está interessada no evento FD_ACCEPT rede para o Soquete. O provedor serviço registra o evento FD_ACCEPT rede e sinais de associado evento objeto imediatamente.

O evento rede FD_WRITE é tratado de maneira ligeiramente diferente. Um evento rede FD_WRITE é gravado quando um Soquete primeiro está conectado com WSPConnect ou aceitos com WSPAccepte em seguida, após um WSPSend Ou WSPSendTo Falha com WSAEWOULDBLOCK e espaço do buffer se torna disponível. Portanto, um cliente Windows Sockets SPI pode assumir que envia é possível iniciando a partir de configuração primeira evento rede FD_WRITE e duradouro até um envio retorna WSAEWOULDBLOCK. Após tal uma falha será o cliente Windows Sockets SPI localizar sem que envia são possível novamente quando um evento rede FD_WRITE é registrado e o associado for objeto evento sinalizado.

O evento rede FD_OOB é usado somente quando um Soquete é configurado para receber dados OOB separadamente. Se o Soquete estiver configurado para receber dados OOB interno, os dados OOB (expedited) são tratados como dados típicos e o cliente Windows Sockets SPI deve registrar um interesse e irá get, evento rede FD_READ, FD_OOB não evento rede. Um cliente Windows Sockets SPI pode definir ou inspecionar a maneira na qual OOB dados para serem manipulados usando WSPSetSockOpt Ou WSPGetSockOpt Para a opção SO_OOBINLINE.

O código de erro em um evento rede FD_CLOSE indica se o Soquete fechar era normal ou abortive. Se o código de erro for zero, então a fechar foi normal; Se o código de erro é WSAECONNRESET, circuito virtual do Soquete foi redefinir. Isso só se aplica a soquetes orientado à conexão como SOCK_STREAM.

O evento rede FD_CLOSE é gravado quando um fechar indicação é recebida para o correspondente circuito virtual para o Soquete. Em termos TCP, isso significa que o FD_CLOSE é gravada quando a conexão entra nos estados FIN WAIT ou WAIT Close. Isso resulta do remoto end executando um WSPShutdown No lado de envio ou um WSPCloseSocket.

Provedores de serviço devem registro Somente Um evento rede FD_CLOSE para indicar encerramento de um circuito virtual, eles devem Não registro um evento rede FD_READ para indicar essa condição.

O evento rede FD_ROUTING_INTERFACE_CHANGE é registrado quando o local que deve ser usado para alcançar o destino especificado na interface WSAIoctl Com alterações SIO_ROUTING_INTERFACE_CHANGE após tal IOCTL foi emitidas.

O evento rede FD_ADDRESS_LIST_CHANGE é registrado quando a lista de endereços da família protocolo do Soquete ao qual o cliente Windows Socket SPI pode alterações BIND Após WSAIoctl Com SIO_ADDRESS_LIST_CHANGE foi emitido.

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

WSPEnumNetworkEvents