Socket.Disconnect(Boolean) Método

Definição

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ê pode 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 ligar Disconnect sem chamar primeiro Shutdown, poderá definir a opção DontLingerSocket e false 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 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 no .NET Framework.

Aplica-se a