WSAAccept
9/8/2008
Essa função condicionalmente aceita uma conexão baseia a valor de retorno de uma função condição e permite a transferir dos dados conexão.
Syntax
SOCKET WSAAccept(
SOCKET s,
struct sockaddr FAR* addr,
LPINT addrlen,
LPCONDITIONPROC lpfnCondition,
DWORD dwCallbackData
);
Parameters
- s
[no] Descritor identificando um Soquete que está aguardando conexões após um chamar a função de listen.
- addr
[out] Opcional ponteiro para uma reserva que recebe o endereço da entidade de conexão, como conhecidos a camada de comunicação. O formato exato das addr parâmetro é determinado pelo família de endereços estabelecido quando a Soquete foi criado.
- addrlen
[in, Out] Ponteiro opcional para um inteiro que contém o comprimento do endereço addr.
- lpfnCondition
[no] Procedimento endereço instância da opcional, função condição Application-supplied que irão tomar uma decisão Accept/Reject com base em informações de chamador passado como parâmetros.
- dwCallbackData
[no] Dados de retorno de chamada passados voltar para o aplicativo como o valor da dwCallbackData parâmetro de função a condição. Este parâmetro não é interpretado pelo Soquetes do Windows.
Return Value
Se não houver erro, essa função retorna um valor de tipo SOCKET Esse é um descritor para a Soquete aceito. Se um erro ocorrer, será retornado um valor de INVALID_SOCKET, e um código de erro específicos podem ser recuperadas por chamado WSAGetLastError.
O inteiro referido por addrlen contém inicialmente a quantidade de espaço apontado pelo addr. Em retorno ele conterá o real comprimento em bytes do endereço retornado. A seguinte tabela mostra uma lista dos códigos de erro possível.
Código de erro | Descrição |
---|---|
WSANOTINITIALISED |
Um bem-sucedido chamar WSAStartup deve ocorrer antes de usar essa função. |
WSAECONNREFUSED |
O solicitação de conexão forçada foi rejeitada, conforme indicado na valor de retorno da função condição (CF_REJECT). |
WSAENETDOWN |
Falha no subsistema da rede. |
WSAEFAULT |
O addrlen parâmetro é muito pequeno ou a addr Ou lpfnCondition não fazem parte de espaço de endereço de usuário. |
WSAEINTR |
O Soquete foi fechada. |
WSAEINPROGRESS |
Um bloqueio é chamar sockets do Windows (Winsock) em andamento. |
WSAEINVAL |
O escutar função não foi chamada prior to esta função, a valor de retorno de função a condição não é um válido um, ou qualquer maiúsculas e minúsculas onde o Soquete especificado é em um inválido estado. |
WSAEMFILE |
A fila for não vazia na entrada para esta função e houver há Soquete disponível descritores. |
WSAENOBUFS |
Nenhuma espaço do buffer está disponível. |
WSAENOTSOCK |
O descritor não é um Soquete. |
WSAEOPNOTSUPP |
O relacionado Soquete não é um tipo que ofereça suporte ao serviço Connection-Oriented. |
WSATRY_AGAIN |
A aceitação da solicitação de conexão foi adiada, conforme indicado na valor de retorno da função condição (CF_DEFER). |
WSAEWOULDBLOCK |
O Soquete é marcado como de não bloqueio e nenhuma conexão está presente para ser aceita. |
WSAEACCES |
Tem o solicitação de conexão que foi oferecida tempo limite atingido fora ou sido withdrawn. |
Remarks
Essa função extrai a primeira conexão sobre a fila de pendente conexões em Soquete s e verifica-lo contra a função condição, desde a função condição for especificada (ou seja, não NULL). Se a função condição retorna CF_ACCEPT, WSAAccept Cria um novo Soquete. O Soquete recém-criado tem as mesmas propriedades que Soquete s, Incluindo assíncrono eventos registrados com WSAEventSelect. Se a função condição retorna CF_REJECT, WSAAccept Rejeita a solicitação de conexão. A função condição é executado no mesmo segmento como essa função e deve retornar tão logo seja possível. Se a decisão não pode ser feita imediatamente, a função condição deve retornar CF_DEFER para indicar que não foi feita nenhuma decisão e nenhuma ação sobre este solicitação de conexão deve ser seguida pelo provedor de serviço. Quando o aplicativo está pronto para executar ação no solicitação de conexão, ele irá invocar WSAAccept novamente e retornar o CF_ACCEPT ou CF_REJECT como uma valor de retorno da função de condição.
Um Soquete em modo padrão (bloqueio) será bloco até que uma conexão esteja presente quando um aplicativo chama WSAAccept e nenhuma conexão está pendente na fila.
Um Soquete em de não bloqueio modo falha com o erro WSAEWOULDBLOCK quando um aplicativo chama WSAAccept e nenhuma conexão está pendente na fila. Após WSAAccept é bem-sucedida e retorna um novo identificador Soquete, Soquete a nova não pode ser usado para aceitar qualquer mais conexões. O original Soquete permanece aberto e ouve para solicitações nova conexão.
O addr parâmetro é um parâmetro de resultados que é concluído com o endereço da entidade de conexão, como conhecidos a camada de comunicação. O formato exato das addr parâmetro é determinado pelo família de endereços no qual a comunicação está ocorrendo. O addrlen parâmetro é um parâmetro value-Result; Ele deve conter inicialmente o quantidade de espaço apontado pelo addr. Em retorno, ele irá conter o real comprimento (em bytes) do endereço retornado. Este chamar é usado com tipos Soquete Connection-Oriented como SOCK_STREAM. Se addr e / ou addrlen são iguais para NULL, em seguida, há informações sobre o remoto endereço da Soquete aceito é retornado. Caso contrário, esses dois parâmetros vai ser concluídos, independentemente de se a função condição for especificada ou que ela retorna.
O protótipo do função callback é da seguinte maneira:
int CALLBACK
ConditionFunc(
IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
OUT LPWSABUF lpCalleeData,
OUT GROUP FAR *g,
IN DWORD_PTR dwCallbackData
);
O ConditionFunc função é um espaço reservado de função callback de Application-supplied. O real função condição deve residir em um DLL ou aplicativo módulo. Ele é exportado no arquivo de definição módulo. Para obter mais informações, consulte Module-Definition File.
O lpCallerId parâmetro aponta para uma estrutura WSABUF que contém o endereço da entidade de conexão, onde seu Len parâmetro é o comprimento da reserva em bytes e seu buf parâmetro é um ponteiro para a reserva. O lpCallerData parâmetro é um parâmetro valor que contém dados qualquer usuário. As informações desses parâmetros são enviadas along with o solicitação de conexão. Se nenhuma identificação chamador ou dados chamador estiver disponível, o correspondente parâmetros será NULL. Muitos protocolos rede não conectar suporte-tempo chamador dados. Mais convencionais protocolos rede podem ser esperados para suporte chamador identificador informações na conexão-tempo solicitação. O buf parte da estrutura de WSABUF apontado pelo lpCallerId aponta para uma estrutura sockaddr. O sockaddr estrutura é interpretada de acordo com o família de endereços (geralmente por conversão o sockaddr Para alguns tipo específico de família de endereços).
O lpCalleeId parâmetro é um parâmetro valor que contém o local endereço da entidade conectada. O buf parte das WSABUF estrutura apontada pelo lpCalleeId aponta para um sockaddr estrutura. O sockaddr estrutura é interpretada de acordo com o família de endereços (geralmente por conversão o sockaddr Para alguns tipo específico de família de endereços).
O lpCalleeData parâmetro é um parâmetro resultado usado pela função condição para fornecer dados usuário voltar para a entidade de conexão. O lpCalleeData->Len Contém inicialmente o comprimento da reserva alocados pela provedor de serviços e apontado pelo lpCalleeData->buf. Um valor de zero significa passando dados usuário voltar para o chamador não é com suporte. A função condição deve copiar up to lpCalleeData->Len bytes de dados em lpCalleeData->buf e, em seguida, atualização lpCalleeData->Len Para indicar o real número de bytes transferidos. Se nenhum dados usuário deve ser passado voltar para o chamador, a função condição deve definir lpCalleeData->Len para zero. O formato de todos os endereço e dados usuário é específico para o família de endereços ao qual pertence o Soquete.
O dwCallbackData valor do parâmetro passado para a função condição é o valor passado como o dwCallbackData parâmetro no original WSAAccept chamar. Esse valor é interpretada somente pelo cliente de sockets do Windows (Winsock). Isso permite que um cliente para transmitir algumas informações de contexto de WSAAccept chamar site por meio para a função condição. Isso também fornece a função condição com quaisquer informações adicionais exigido para determinar se deseja aceitar a conexão. Um uso típico é para transmitir um (adequadamente CAST) ponteiro para uma estrutura de dados contendo referências a objetos Application-defined com o qual este Soquete é associado.
Requirements
Header | winsock2.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
accept (Windows Sockets)
bind (Windows Sockets)
connect (Windows Sockets)
getsockopt (Windows Sockets)
listen
select
sockaddr
socket (Windows Sockets)
WSAConnect
WSAEventSelect
WSAGetLastError
WSAStartup