Socket.Disconnect(Boolean) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fecha a conexão de soquete e permite a reutilização do soquete.
public:
void Disconnect(bool reuseSocket);
public void Disconnect (bool reuseSocket);
member this.Disconnect : bool -> unit
Public Sub Disconnect (reuseSocket As Boolean)
Parâmetros
- reuseSocket
- Boolean
true
se o soquete puder ser reutilizado após a conexão atual ser fechada; caso contrário, false
.
Exceções
O objeto Socket foi fechado.
Ocorreu um erro ao tentar acessar o soquete.
Exemplos
O exemplo de código a seguir cria um soquete para comunicação síncrona e envia alguns dados para um host remoto. Em seguida, ele chama Shutdown, para interromper a atividade de envio e recebimento e Disconnect, para fechar a conexão de soquete.
IPHostEntry^ ipHost = Dns::GetHostEntry( Dns::GetHostName() );
IPAddress^ ipAddr = ipHost->AddressList[ 0 ];
IPEndPoint^ ipEndPoint = gcnew IPEndPoint( ipAddr,11000 );
Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
// Connect the socket to the remote end point.
client->Connect( ipEndPoint );
// Send some data to the remote device.
String^ data = "This is a string of data <EOF>";
array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
int bytesTransferred = client->Send( buffer );
// Write to the console the number of bytes transferred.
Console::WriteLine( "{0} bytes were sent.\n", bytesTransferred );
// Release the socket.
client->Shutdown( SocketShutdown::Both );
client->Disconnect( true );
if ( client->Connected )
Console::WriteLine( "We're still connnected" );
else
Console::WriteLine( "We're disconnected" );
IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Connect the socket to the remote end point.
client.Connect(ipEndPoint);
// Send some data to the remote device.
string data = "This is a string of data <EOF>";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int bytesTransferred = client.Send(buffer);
// Write to the console the number of bytes transferred.
Console.WriteLine("{0} bytes were sent.\n", bytesTransferred);
// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Disconnect(true);
if (client.Connected)
Console.WriteLine("We're still connnected");
else
Console.WriteLine("We're disconnected");
Comentários
Se você estiver usando um protocolo orientado à conexão, poderá usar esse método para fechar o soquete. Esse método encerra a conexão e define a Connected propriedade como false
. No entanto, se reuseSocket
for true
, você poderá reutilizar o soquete.
Para garantir que todos os dados sejam enviados e recebidos antes que o soquete seja fechado, você deve chamar Shutdown antes de chamar o Disconnect método .
Se você precisar chamar Disconnect sem chamar Shutdownprimeiro , poderá definir a opção DontLingerSocket como false
e especificar um intervalo de tempo limite diferente de zero para garantir que os dados enfileirados para transmissão de saída sejam enviados.
Disconnect em seguida, bloqueia até que os dados sejam enviados ou até que o tempo limite especificado expire. Se você definir DontLinger como false
e especificar um intervalo de tempo limite zero, Close liberará a conexão e descartará automaticamente os dados enfileirados de saída.
Observação
Se você receber um SocketException, use a SocketException.ErrorCode propriedade para obter o código de erro específico. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.
Observação
Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo. Para obter mais informações, consulte Rastreamento de rede em .NET Framework.