Compartilhar via


Função WSARecvDisconnect (winsock2.h)

A função WSARecvDisconnect encerra a recepção em um soquete e recupera os dados de desconexão se o soquete é orientado para conexão.

Sintaxe

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

Parâmetros

[in] s

Um descritor que identifica um soquete.

[out] lpInboundDisconnectData

Um ponteiro para os dados de desconexão de entrada.

Retornar valor

Se nenhum erro ocorrer, WSARecvDisconnect retornará zero. Caso contrário, um valor de SOCKET_ERROR é retornado e um código de erro específico pode ser recuperado chamando WSAGetLastError.

Código do erro Significado
WSANOTINITIALISED
Uma chamada WSAStartup bem-sucedida deve ocorrer antes de usar essa função.
WSAENETDOWN
O subsistema de rede falhou.
WSAEFAULT
O buffer referenciado pelo parâmetro lpInboundDisconnectData é muito pequeno.
WSAENOPROTOOPT
Os dados de desconexão não são compatíveis com a família de protocolos indicada. Observe que implementações de TCP/IP que não dão suporte a dados de desconexão não são necessárias para retornar o código de erro WSAENOPROTOOPT. Consulte a seção comentários para obter informações sobre a implementação da Microsoft de TCP/IP.
WSAEINPROGRESS
Uma chamada do Windows Sockets 1.1 de bloqueio está em andamento ou o provedor de serviços ainda está processando uma função de retorno de chamada.
WSAENOTCONN
O soquete não está conectado (somente soquetes orientados à conexão).
WSAENOTSOCK
O descritor não é um soquete.

Comentários

A função WSARecvDisconnect é usada em soquetes orientados à conexão para desabilitar a recepção e recuperar quaisquer dados de desconexão de entrada da parte remota. Isso é equivalente a um desligamento (SD_RECEIVE), exceto que o WSARecvDisconnect também permite o recebimento de dados de desconexão (em protocolos que dão suporte a ele).

Depois que essa função tiver sido emitida com êxito, os recebimentos subsequentes no soquete serão desautorizados. Chamar WSARecvDisconnect não tem efeito nas camadas de protocolo inferiores. Para soquetes TCP, se ainda houver dados enfileirados no soquete aguardando para serem recebidos ou os dados chegarem posteriormente, a conexão será redefinida, pois os dados não poderão ser entregues ao usuário. Para UDP, os datagramas de entrada são aceitos e enfileirados. Em nenhum caso será gerado um pacote de erro ICMP.

Nota A implementação nativa de TCP/IP no Windows não dá suporte a dados de desconexão. Os dados de desconexão só têm suporte com provedores de Soquetes do Windows que têm o sinalizador XP1_DISCONNECT_DATA em sua estrutura de WSAPROTOCOL_INFO . Use a função WSAEnumProtocols para obter estruturas WSAPROTOCOL_INFO para todos os provedores instalados.
 
Para receber dados de desconexão de entrada com êxito, um aplicativo deve usar outros mecanismos para determinar se o circuito foi fechado. Por exemplo, um aplicativo precisa receber uma notificação FD_CLOSE, receber um valor de retorno zero ou receber um código de erro WSAEDISCON ou WSAECONNRESET do recv/WSARecv.

A função WSARecvDisconnect não fecha o soquete e os recursos anexados ao soquete não serão liberados até que closesocket seja invocado.

A função WSARecvDisconnect não bloqueia independentemente da configuração de SO_LINGER no soquete.

Um aplicativo não deve depender de ser capaz de reutilizar um soquete depois de ser desconectado usando WSARecvDisconnect. Em particular, um provedor do Windows Sockets não é necessário para dar suporte ao uso de connect ou WSAConnect em tal soquete.

Nota Ao emitir uma chamada winsock de bloqueio, como WSARecvDisconnect, o Winsock pode precisar aguardar um evento de rede antes que a chamada possa ser concluída. O Winsock executa uma espera alertável nessa situação, que pode ser interrompida por uma APC (chamada de procedimento assíncrona) agendada no mesmo thread. Emitir outra chamada winsock de bloqueio dentro de um APC que interrompeu uma chamada Winsock de bloqueio contínuo no mesmo thread levará a um comportamento indefinido e nunca deve ser tentado pelos clientes winsock.
 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winsock2.h
Biblioteca Ws2_32.lib
DLL Ws2_32.dll

Confira também

Wsaconnect

Wsaenumprotocols

Wsagetlasterror

WSAPROTOCOL_INFO

WSARecv

Funções Winsock

Referência de Winsock

Closesocket

connect

socket