Socket::EndDisconnect Method (IAsyncResult^)
Ends a pending asynchronous disconnect request.
Assembly: System (in System.dll)
Parameters
- asyncResult
-
Type:
System::IAsyncResult^
An IAsyncResult object that stores state information and any user-defined data for this 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. |
| ArgumentNullException | asyncResult is null. |
| ArgumentException | asyncResult was not returned by a call to the BeginDisconnect method. |
| InvalidOperationException | EndDisconnect was previously called for the asynchronous connection. |
| SocketException | An error occurred when attempting to access the socket. See the Remarks section for more information. |
| WebException | The disconnect request has timed out. |
EndDisconnect completes a call to BeginDisconnect. The EndDisconnect method blocks until the disconnect completes. For information about asynchronous operations, see the Asynchronous Programming Overview topic in the MSDN library.
Note |
|---|
If you receive a SocketException, 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. The callback delegate calls EndDisconnect to end the asynchronous 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
