Socket::BeginDisconnect Method (Boolean, AsyncCallback^, Object^)
Begins an asynchronous request to disconnect from a remote endpoint.
Assembly: System (in System.dll)
public: [HostProtectionAttribute(SecurityAction::LinkDemand, ExternalThreading = true)] IAsyncResult^ BeginDisconnect( bool reuseSocket, AsyncCallback^ callback, Object^ state )
Parameters
- reuseSocket
-
Type:
System::Boolean
true if this socket can be reused after the connection is closed; otherwise, false.
- callback
-
Type:
System::AsyncCallback^
The AsyncCallback delegate.
- state
-
Type:
System::Object^
An object that contains state information for this request.
Return Value
Type: System::IAsyncResult^An IAsyncResult object that references the asynchronous operation.
| Exception | Condition |
|---|---|
| NotSupportedException | The operating system is Windows 2000 or earlier, and this method requires Windows XP. |
| ObjectDisposedException | The Socket object has been closed. |
| SocketException | An error occurred when attempting to access the socket. See the Remarks section for more information. |
If you are using a connection-oriented protocol, you can call the BeginDisconnect method to request a disconnect from a remote endpoint. If reuseSocket is true, you can reuse the socket.
The BeginDisconnect method uses a separate thread to invoke the specified callback method. 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.
Note |
|---|
If you receive a SocketException exception, use the SocketException::ErrorCode property to obtain the specific error code. After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation in the MSDN library for a detailed description of the error. |
Note |
|---|
This member outputs trace information when you enable network tracing in your application. For more information, see Network Tracing in the .NET Framework. |
The following code example creates a socket for asynchronous communication and sends some data to a remote host. When the data has been sent, Shutdown is called to stop the send and receive activity. Then BeginDisconnect is called to begin a disconnect request. 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:
Available since 2.0
