Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Método

Definição

Inicia uma solicitação assíncrona para se desconectar de um ponto de extremidade remoto.Begins an asynchronous request to disconnect from a remote endpoint.

public:
 IAsyncResult ^ BeginDisconnect(bool reuseSocket, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginDisconnect (bool reuseSocket, AsyncCallback? callback, object? state);
public IAsyncResult BeginDisconnect (bool reuseSocket, AsyncCallback callback, object state);
member this.BeginDisconnect : bool * AsyncCallback * obj -> IAsyncResult
Public Function BeginDisconnect (reuseSocket As Boolean, callback As AsyncCallback, state As Object) As IAsyncResult

Parâmetros

reuseSocket
Boolean

true se o soquete puder ser reutilizado após a conexão ser fechada; caso contrário, false.true if this socket can be reused after the connection is closed; otherwise, false.

callback
AsyncCallback

O delegado AsyncCallback.The AsyncCallback delegate.

state
Object

Um objeto que contém informações de estado para essa solicitação.An object that contains state information for this request.

Retornos

IAsyncResult

Um objeto IAsyncResult que faz referência à operação assíncrona.An IAsyncResult object that references the asynchronous operation.

Exceções

O objeto Socket foi fechado.The Socket object has been closed.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

Exemplos

O exemplo de código a seguir cria um soquete para comunicação assíncrona e envia alguns dados para um host remoto.The following code example creates a socket for asynchronous communication and sends some data to a remote host. Quando os dados são enviados, Shutdown é chamado para interromper a atividade de envio e recebimento.When the data has been sent, Shutdown is called to stop the send and receive activity. Em seguida, BeginDisconnect é chamado para iniciar uma solicitação de desconexão.Then BeginDisconnect is called to begin a disconnect request. Quando a solicitação for concluída, a Connected propriedade será consultada para testar se o soquete está desconectado.When the request completes, the Connected property is queried to test whether the socket is disconnected.

      // Establish the remote endpoint for the socket.
      // For this example use local computer.
      IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
      IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
      IPEndPoint^ remoteEP = gcnew IPEndPoint( ipAddress,11000 );

      // Create a TCP/IP socket.
      Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

      // Connect to the remote endpoint.
      client->BeginConnect( remoteEP, gcnew AsyncCallback( ConnectCallback ), client );

      // Wait for connect.
      connectDone->WaitOne();

      // Send some data to the remote device.
      String^ data = "This is a string of data <EOF>";
      array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
      client->BeginSend( buffer, 0, buffer->Length, static_cast<SocketFlags>(0), gcnew AsyncCallback( ClientSendCallback ), client );

      // Wait for send done.
      sendDone->WaitOne();

      // Release the socket.
      client->Shutdown( SocketShutdown::Both );
      client->BeginDisconnect( true, gcnew AsyncCallback( DisconnectCallback ), client );

      // Wait for the disconnect to complete.
      disconnectDone->WaitOne();
      if ( client->Connected )
            Console::WriteLine( "We're still connected" );
      else
            Console::WriteLine( "We're disconnected" );
   }

private:
   static void DisconnectCallback( IAsyncResult^ ar )
   {
      // Complete the disconnect request.
      Socket^ client = dynamic_cast<Socket^>(ar->AsyncState);
      client->EndDisconnect( ar );

      // Signal that the disconnect is complete.
      disconnectDone->Set();
   }

public:

    // Establish the remote endpoint for the socket.
    // For this example use local computer.
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

    // Create a TCP/IP socket.
    Socket client = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    // Connect to the remote endpoint.
    client.BeginConnect(remoteEP,
        new AsyncCallback(ConnectCallback), client);

    // Wait for connect.
    connectDone.WaitOne();

    // Send some data to the remote device.
    string data = "This is a string of data <EOF>";
    byte[] buffer = Encoding.ASCII.GetBytes(data);
    client.BeginSend(buffer, 0, buffer.Length, 0, new AsyncCallback(ClientSendCallback), client);
    // Wait for send done.
    sendDone.WaitOne();

    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.BeginDisconnect(true, new AsyncCallback(DisconnectCallback), client);

    // Wait for the disconnect to complete.
    disconnectDone.WaitOne();
    if (client.Connected)
        Console.WriteLine("We're still connected");
    else
        Console.WriteLine("We're disconnected");
}

private static void DisconnectCallback(IAsyncResult ar)
{
    // Complete the disconnect request.
    Socket client = (Socket) ar.AsyncState;
    client.EndDisconnect(ar);

    // Signal that the disconnect is complete.
    disconnectDone.Set();
}

Comentários

Se você estiver usando um protocolo orientado a conexão, poderá chamar o BeginDisconnect método para solicitar uma desconexão de um ponto de extremidade remoto.If you are using a connection-oriented protocol, you can call the BeginDisconnect method to request a disconnect from a remote endpoint. Se reuseSocket for true , você poderá reutilizar o soquete.If reuseSocket is true, you can reuse the socket.

O BeginDisconnect método usa um thread separado para invocar o método de retorno de chamada especificado.The BeginDisconnect method uses a separate thread to invoke the specified callback method. O EndDisconnect método é bloqueado até que a desconexão pendente seja concluída.The EndDisconnect method blocks until the pending disconnect is complete. Para obter informações adicionais sobre como escrever métodos de retorno de chamada, consulte empacotando um delegado como um método de retorno de chamada.For additional information on writing callback methods, see Marshaling a Delegate as a Callback Method.

Observação

Se você receber uma SocketException exceção, use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException exception, use the SocketException.ErrorCode property to obtain the specific error code. 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.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Aplica-se a