Compartilhar via


closesocket

Windows Mobile SupportedWindows Embedded CE Supported

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