closesocket
9/8/2008
Essa função fecha um Soquete existente.
Syntax
int closesocket(
SOCKET s
);
Parameters
- s
[no] Descritor identificando o Soquete para fechar.
Return Value
Se não houver erro, essa função retornará zero. Se um erro ocorrer, será retornado um valor de SOCKET_ERROR, e um código de erro específicos podem ser recuperadas por chamado WSAGetLastError.
Remarks
Use esta função para versão o descritor Soquete s Assim que mais referências a s falham 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. Qualquer pendente bloqueio, assíncrono chamadas emitidas por qualquer segmento nesse processo são canceladas sem postando mensagens qualquer notificação.
Qualquer pendente sobreposto enviar e receber operações emitidas por qualquer segmento nesse processo também serão canceladas. Qualquer evento, rotina de conclusão ou ação porta de conclusão especificado para essas operações sobrepostas é realizada. O pendente sobreposto operações falha com o status de erro WSA_OPERATION_ABORTED.
Um aplicativo sempre deve ter um compatível chamar para closesocket Para cada bem-sucedido chamar para o Soquete (Soquetes do Windows) função para retornar todos os recursos Soquete para o sistema.
A seguinte tabela mostra como a semântica de closesocket são afetados pelas opções Soquete SO_LINGER e SO_DONTLINGER. Por padrão, SO_DONTLINGER é habilitado e SO_LINGER está desativada.
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 estiver definida com um zero intervalo tempo limite (isto é, o Linger estrutura membros l_onoff é diferente de zero e l_linger é zero), closesocket não é 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 Recv 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 closesocket 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 todos os dados foi enviada, a implementação Soquetes do Windows encerra a conexão antes closesocket Retorna.
Habilitando SO_LINGER com um diferente de zero tempo limite intervalo em um Soquete non-Blocking não é recomendado. Neste maiúsculas e minúsculas, a chamar para closesocket falhará com um erro do WSAEWOULDBLOCK se fechar a operação não pode ser concluída imediatamente. Se closesocket Falha com WSAEWOULDBLOCK é o identificador Soquete ainda válido e uma desconexão não for iniciada. O aplicativo deve chamar closesocket novamente para fechar a Soquete.
Observação
Quando closesocket é chamado em um Soquete non-Blocking com um intervalo tempo limite non-zero, o chamar retornará sucesso (0) e o identificador serão inválido.No entanto, o Soquete ainda tentará enviar todos pendente dados até que expire o tempo limite.
Se SO_DONTLINGER será definido em um Soquete transmitir pela configuração de l_onoff membro das Linger estrutura para zero, o closesocket chamar retornará imediatamente e não recebe WSAWOULDBLOCK 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 também é chamado de uma desconexão normal. Neste maiúsculas e minúsculas, o provedor Soquetes do Windows não é possível versão a Soquete e outros recursos para um período arbitrário, assim afetar aplicativos que pretende usar disponível todos os soquetes. Esse é o comportamento usar como padrão (SO_DONTLINGER é definida Por padrão).
Observação
Para garantir que todos os dados é enviado e recebido em uma conexão, um aplicativo deve chamar desligamento Antes chamado closesocket.Também detalhes, um evento rede FD_CLOSE não é lançado após closesocket é chamado.
A seguinte lista mostra os closesocket função comportamento:
- Se estiver SO_DONTLINGER habilitado (o configuração padrão), ele sempre retorna imediatamente — conexão normalmente é fechada no segundo plano.
- Se SO_LINGER é habilitado com um zero tempo limite, ele sempre retorna imediatamente — conexão é redefinição/finalizado.
- Se SO_LINGER é habilitado com um diferente de zero tempo limite, ele bloqueia até que todos os dados enviados ou tempo limite expira (com um bloqueio Soquete) e retorna imediatamente indicando falha (com um de não bloqueio Soquete).
Anotações de Sockets IrDA
O código de erro WSAENETDOWN não é com suporte.
O arquivo cabeçalho Af_irda.h deve ser explicitamente incluído.
O padrão Linger opções são com suporte.
Apesar de IrDA não fornece um fechar normal, IrDA será adiar fechando até filas de recepção são removidas. Portanto, um aplicativo pode enviar dados e imediatamente chamar o closesocket função e estar certo que o receptor irá copiar os dados antes de receber uma mensagem FD_CLOSE.
Observação
Modo assíncrono transferir (ATM) não é com suporte em Windows Embedded CE.
Para obter mais inforamtion sobre suporte IrDA no Windows Embedded CE, consulte Comunicação via infravermelho.
Código de erro
Código de erro | Descrição |
---|---|
WSANOTINITIALISED |
Um bem-sucedido WSAStartup chamar deve ocorrer antes de usar essa função. |
WSAENETDOWN |
Falha no subsistema da rede. |
WSAENOTSOCK |
O descritor não é um Soquete. |
WSAEINPROGRESS |
Um bloqueio é chamar sockets do Windows (Winsock) em andamento, ou o serviço provedor ainda é processamento um função callback. |
WSAEINTR |
O Soquete foi fechada. |
WSAEWOULDBLOCK |
O Soquete é marcado como de não bloqueio e SO_LINGER é definido como um diferente de zero valor de tempo limite. |
Requirements
Header | winsock2.h |
Library | Ws2.lib |
Windows Embedded CE | Windows CE 1.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
accept (Windows Sockets)
ioctlsocket
linger
recv
setsockopt (Windows Sockets)
shutdown
socket (Windows Sockets)
WSAGetLastError
WSARecv
WSARecvFrom
WSASend
WSASendTo
WSAStartup