WSPCloseSocket
9/8/2008
Essa função fecha um Soquete.
Syntax
int WSPCloseSocket(
SOCKET s,
LPINT lpErrno
);
Parameters
- s
[no] Descritor identificando um Soquete.
- lpErrno
[out] Ponteiro para o código de erro.
Return Value
Se não houver erro, essa função retornará zero. Caso contrário, será retornado um valor de SOCKET_ERROR e um código de erro específico 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. |
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. |
WSAEWOULDBLOCK |
Soquete é marcado como de não bloqueio e SO_LINGER é definido como um diferente de zero valor de tempo limite. |
Remarks
Essa função fecha um Soquete. Mais precisamente, ele libera o descritor Soquete s, portanto mais referências a s deve falhar com o erro WSAENOTSOCK. Se esse for a última referência para um subjacente Soquete, o associado nomeação informações e enfileirado dados são descartados. Nenhum bloqueio ou assíncrono chamadas pendente na Soquete (emitida por qualquer segmento nesse processo) serão canceladas sem postando mensagens qualquer notificação. Qualquer pendente sobreposto operações emitidas por qualquer segmento nesse processo também serão canceladas. Qualquer ação de conclusão foi especificada para essas operações sobrepostas é executada (por exemplo, evento, rotina de conclusão ou porta de conclusão). Neste maiúsculas e minúsculas, o pendente sobreposto operações falha com o status de erro WSA_OPERATION_ABORTED. FD_CLOSE não serão publicados após WSPCloseSocket é chamado.
Essa função comporta-se no seguinte maneira:
- Se estiver SO_DONTLINGER habilitado (o configuração padrão), essa função retorna imediatamente e conexão normalmente é fechada no segundo plano.
- Se SO_LINGER é habilitado com um zero tempo limite, essa função retorna imediatamente e a conexão é redefinição/finalizado.
-Ou- - Se SO_LINGER é habilitado com um diferente de zero tempo limite com um bloqueio Soquete, este functionblocks até que todos os dados são enviados ou expirar a tempo limite.
- Se SO_LINGER é habilitado com um diferente de zero tempo limite com um de não bloqueio Soquete, este functionreturns imediatamente, assim, indicando falha.
A seguinte tabela mostra como a semântica desta função é afetada pelas opções de Soquete SO_LINGER e SO_DONTLINGER.
Opção | Intervalo | Tipo de fechar | Aguardar fechar? |
---|---|---|---|
SO_DONTLINGER |
Não cuidado |
Normal |
Não |
SO_LINGER |
Zero |
Disco rígido |
Não |
SO_LINGER |
Diferente de zero |
Normal |
Sim |
Se SO_LINGER for definida (ou seja, o l_onoff é membro da estrutura Linger diferente de zero) e o intervalo tempo limite, l_linger, for zero, essa função não está bloqueada mesmo enfileirado dados ainda não tem sido enviados ou confirmados. Isso é chamado fechar um disco rígido ou abortive, como circuito virtual do Soquete é redefinir imediatamente e quaisquer dados não enviados é perdida. Qualquer WSPRecv chamar no remoto lado do circuito falhará com WSAECONNRESET.
Se estiver definida com um diferente de zero SO_LINGER tempo limite intervalo em um bloqueio Soquete, o WSPClosesocket chamar blocos em um bloqueio Soquete até que os dados restantes foi enviados ou até que expira a tempo limite. Isso é chamado de uma desconexão normal. Se o tempo limite expirar antes de todos os dados tenha sido enviado, o provedor de serviço deve finalizar a conexão antes WSPClosesocket Retorna.
Ativando SO_LINGER com um diferente de zero tempo limite intervalo em um de não bloqueio Soquete não é recomendado. Neste maiúsculas e minúsculas, a chamar para WSPClosesocket falhará com um erro do WSAEWOULDBLOCK se fechar a operação não pode ser concluída imediatamente. Se WSPClosesocket Falha com WSAEWOULDBLOCK, o identificador Soquete ainda é válido e uma desconexão não for iniciado.
O cliente Windows Sockets SPI Deve chamar WSPClosesocket novamente para fechar a Soquete. No entanto WSPClosesocket pode continuar a falhar. A seguinte lista mostra a ação de cliente Windows Sockets SPI deve levar para parar WSPClosesocket da falha:
- Desativa SO_DONTLINGER.
- Permite que SO_LINGER com um zero tempo limite.
- Chamadas WSPShutdown Para iniciar encerramento.
Se SO_DONTLINGER estiver definido em um Soquete transmitir (isto é, o l_onoff membro da estrutura Linger é zero), o WSPClosesocket chamar retornará imediatamente e não get WSAEWOULDBLOCK, se o Soquete é bloqueio ou de não bloqueio. No entanto, quaisquer dados enfileirado para transmissão será enviado se possível antes de subjacente Soquete é fechado. Isso é chamado de uma desconexão normal e é o comportamento usar como padrão.
Observe que neste maiúsculas e minúsculas o Soquetes do Windows provedor tem permissão para reter todos os recursos associado com o Soquete até tal tempo como a desconexão normal foi concluída ou o provedor termina a conexão devido a uma incapacidade completo a operação em uma quantidade Provider-determined de tempo. Isso pode afetar clientes Soquetes do Windows que pretende usar disponível todos os soquetes. Este é o comportamento usar como padrão; SO_DONTLINGER é definido Por padrão.
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 |