Socket.BeginDisconnect(Boolean, AsyncCallback, Object) メソッド

定義

リモート エンドポイントからの切断の非同期要求を開始します。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

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

callback
AsyncCallback

AsyncCallback デリゲート。The AsyncCallback delegate.

state
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 が呼び出され、送信と受信のアクティビティが停止されます。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.

適用対象