Função de retorno de chamada LPWSPACCEPT (ws2spi.h)
A função LPWSPAccept aceita condicionalmente uma conexão com base no valor retornado de uma função de condição.
Sintaxe
LPWSPACCEPT Lpwspaccept;
SOCKET Lpwspaccept(
[in] SOCKET s,
[out] sockaddr *addr,
[in, out] LPINT addrlen,
[in] LPCONDITIONPROC lpfnCondition,
[in] DWORD_PTR dwCallbackData,
[out] LPINT lpErrno
)
{...}
Parâmetros
[in] s
Descritor que identifica um soquete que está escutando conexões após um LPWSPListen.
[out] addr
Ponteiro opcional para um buffer que recebe o endereço da entidade de conexão, como conhecido pelo provedor de serviços. O formato exato do parâmetro do suplemento
[in, out] addrlen
Ponteiro opcional para um inteiro que contém o comprimento do parâmetro do suplemento
[in] lpfnCondition
Endereço da instância de procedimento de uma função de condição opcional fornecida pelos Soquetes do Windows. Essa função é usada na decisão de aceitação ou rejeição com base nas informações de chamador passadas como parâmetros.
[in] dwCallbackData
Dados de retorno de chamada a serem passados de volta para o cliente do Windows Socket 2 como o valor do parâmetro dwCallbackData da função de condição. Esse parâmetro não é interpretado pelo provedor de serviços.
[out] lpErrno
Ponteiro para o código de erro.
Valor de retorno
Se nenhum erro ocorrer, LPWSPAccept retornará um valor do tipo SOCKET que é um descritor para o soquete aceito. Caso contrário, um valor de INVALID_SOCKET será retornado e um código de erro específico estará disponível em lpErrno.
Código de erro | Significado |
---|---|
A solicitação de conexão foi rejeitada com força, conforme indicado no valor retornado da função de condição (CF_REJECT). | |
Uma conexão de entrada foi indicada, mas posteriormente foi encerrada pelo par remoto antes de aceitar a chamada. | |
O subsistema de rede falhou. | |
O parâmetro addrlen é muito pequeno ou o parâmetro lpfnCondition não faz parte do espaço de endereço do usuário. | |
Uma chamada (bloqueio) foi cancelada por meio de LPWSPCancelBlockingCall . | |
Uma chamada de Bloqueio do Windows Sockets está em andamento. | |
LPWSPListen não foi invocado antes de LPWSPAccept, o parâmetro g especificado na função de condição não é um valor válido, o valor retornado da função de condição não é válido ou qualquer caso em que o soquete especificado esteja em um estado inválido. | |
A fila não é diferente na entrada para LPWSPAccept e não há descritores de soquete disponíveis. | |
Nenhum espaço de buffer está disponível. | |
O descritor não é um soquete. | |
O soquete referenciado não é um tipo que dá suporte ao serviço orientado à conexão. | |
A aceitação da solicitação de conexão foi adiada conforme indicado no valor retornado da função de condição (CF_DEFER). | |
O soquete é marcado como não desbloqueado e nenhuma conexão está presente para ser aceita. | |
A solicitação de conexão oferecida atingiu o tempo limite ou foi retirada. |
Observações
A função LPWSPAccept
Os soquetes recém-criados têm as mesmas propriedades que o soquete , incluindo eventos de rede registrados com LPWSPAsyncSelect ou com LPWSPEventSelect. Conforme descrito em DescriptorAllocation, quando novos descritores de soquete são alocados, os provedores IFS devem chamar WPUModifyIFSHandle e provedores não IFS devem chamar WPUCreateSocketHandle.
Se a função de condição retornar CF_REJECT, LPWSPAccept rejeitará a solicitação de conexão. Se a decisão de aceitação/rejeição do aplicativo não puder ser tomada imediatamente, a função de condição retornará CF_DEFER para indicar que nenhuma decisão foi tomada. Nenhuma ação sobre essa solicitação de conexão deve ser tomada pelo provedor de serviços. Quando o aplicativo estiver pronto para executar uma ação na solicitação de conexão, ele invocará LPWSPAccept novamente e retornará CF_ACCEPT ou CF_REJECT como um valor retornado da função de condição.
Para soquetes que estão no modo de bloqueio (padrão), se nenhuma conexão pendente estiver presente na fila, LPWSPAccept bloqueará o chamador até que uma conexão esteja presente. Para soquetes no modo sem bloqueio, se essa função for chamada quando nenhuma conexão pendente estiver presente na fila, LPWSPAccept retornará o código de erro WSAEWOULDBLOCK. O soquete aceito não pode ser usado para aceitar mais conexões. O soquete original permanece aberto.
O parâmetro de suplemento é um parâmetro de resultado que é preenchido com o endereço da entidade de conexão, como conhecido pelo provedor de serviços. O formato exato do parâmetro do suplemento
O protótipo da função de condição é o seguinte.
int CALLBACK
ConditionFunc(
IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
IN LPWSABUF lpCalleeData,
OUT GROUP FAR * g,
IN DWORD_PTR dwCallbackData
);
O lpCallerId
O parâmetro lpSQOS faz referência às especificações de fluxo do soquete especificados pelo chamador, um para cada direção, seguido por parâmetros adicionais específicos do provedor. Os valores de especificação de fluxo de envio ou recebimento serão ignorados conforme apropriado para quaisquer soquetes unidirecionais. Um valor nulo para lpSQOS indica que não há nenhum QoS fornecido pelo chamador e que nenhuma negociação é possível. Um ponteiro
O lpCalleeId é um parâmetro de valor que contém o endereço local da entidade conectada. A
O lpCalleeData é um parâmetro de resultado usado pela função de condição para fornecer dados do usuário de volta à entidade de conexão. O armazenamento para esses dados deve ser fornecido pelo provedor de serviços. O lpCalleeData->len inicialmente contém o comprimento do buffer alocado pelo provedor de serviços e apontado por lpCalleeData->buf. Um valor zero significa que não há suporte para a passagem de dados do usuário para o chamador. A função de condição copiará até lpCalleeData ->len bytes de dados em lpCalleeData ->bufe, em seguida, atualizará lpCalleeData->len para indicar o número real de bytes transferidos. Se nenhum dado do usuário for passado de volta para o chamador, a função de condição definirá lpCalleeData –>len como zero. O formato de todos os dados de endereço e de usuário é específico para a família de endereços à qual o soquete pertence.
O valor do parâmetro dwCallbackData
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 2000 Professional [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows 2000 Server [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | ws2spi.h |
Consulte também
LPWSPEventSelect