Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Method

定義

リモート エンドポイントからの切断の非同期要求を開始します。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);
member this.BeginDisconnect : bool * AsyncCallback * obj -> IAsyncResult
Public Function BeginDisconnect (reuseSocket As Boolean, callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

reuseSocket
Boolean Boolean Boolean Boolean

接続の終了後、このソケットが再利用できる場合は true。それ以外の場合は falsetrue if this socket can be reused after the connection is closed; otherwise, false.

state
Object Object Object Object

この要求のステータス情報を格納するオブジェクト。An object that contains state information for this request.

戻り値

非同期操作を参照する IAsyncResult オブジェクト。An IAsyncResult object that references the asynchronous operation.

例外

Windows 2000 以前のオペレーティング システムです。このメソッドを使用するには、Windows XP が必要です。The operating system is Windows 2000 or earlier, and this method requires Windows XP.

Socket オブジェクトは閉じられています。The Socket object has been closed.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

次のコード例では、非同期通信用ソケットを作成し、リモート ホストにデータを送信します。The following code example creates a socket for asynchronous communication and sends some data to a remote host. データが送信されると、Shutdownを送信を停止し、receive アクティビティが呼び出されます。When the data has been sent, Shutdown is called to stop the send and receive activity. BeginDisconnect切断要求を開始すると呼びます。Then BeginDisconnect is called to begin a disconnect request. 要求が完了したら、Connectedプロパティは、ソケットが切断されているかどうかをテストするクエリを実行します。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();
}

注釈

呼び出すことができます、接続指向プロトコルを使用している場合、BeginDisconnectリモート エンドポイントからの接続が切断を要求するメソッド。If you are using a connection-oriented protocol, you can call the BeginDisconnect method to request a disconnect from a remote endpoint. 場合reuseSockettrueソケットを再利用することができます。If reuseSocket is true, you can reuse the socket.

BeginDisconnectメソッドでは、個別のスレッドを使用して、指定されたコールバック メソッドを呼び出します。The BeginDisconnect method uses a separate thread to invoke the specified callback method. EndDisconnect保留中の切断までメソッドのブロックが完了します。The EndDisconnect method blocks until the pending disconnect is complete. コールバック メソッドの記述に関する詳細については、次を参照してください。コールバック メソッドとしてデリゲートのマーシャ リングします。For additional information on writing callback methods, see Marshaling a Delegate as a Callback Method.

注意

表示された場合、SocketException例外を使用して、SocketException.ErrorCode特定のエラー コードを取得するプロパティ。If you receive a SocketException exception, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得した後を参照してください、 Windows Sockets version 2 API エラー コードエラーの詳細な説明のドキュメント。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、次を参照してください。ネットワークのトレースを .NET Framework でします。For more information, see Network Tracing in the .NET Framework.

適用対象