SslStream::EndRead Method (IAsyncResult^)
Ends an asynchronous read operation started with a previous call to BeginRead.
Assembly: System (in System.dll)
Parameters
- asyncResult
-
Type:
System::IAsyncResult^
An IAsyncResult instance returned by a call to BeginRead
Return Value
Type: System::Int32A Int32 value that specifies the number of bytes read from the underlying stream.
| Exception | Condition |
|---|---|
| ArgumentNullException | asyncResult is null. |
| ArgumentException | asyncResult was not created by a call to BeginRead. |
| InvalidOperationException | There is no pending read operation to complete. |
| IOException | The read operation failed. |
| InvalidOperationException | Authentication has not occurred. |
If the operation has not completed, this method blocks until it does.
To perform this operation synchronously, use the Read method.
You cannot call this method until you have successfully authenticated. To authenticate call one of the AuthenticateAsClient, or BeginAuthenticateAsClient, AuthenticateAsServer, BeginAuthenticateAsServer methods.
The following code example demonstrates ending an asynchronous read operation.
static void ReadCallback( IAsyncResult^ ar ) { // Read the message sent by the server. // The end of the message is signaled using the // "<EOF>" marker. SslStream^ stream = dynamic_cast<SslStream^>(ar->AsyncState); int byteCount = -1; try { Console::WriteLine( L"Reading data from the server." ); byteCount = stream->EndRead( ar ); // Use Decoder class to convert from bytes to UTF8 // in case a character spans two buffers. Decoder^ decoder = Encoding::UTF8->GetDecoder(); array<Char>^chars = gcnew array<Char>(decoder->GetCharCount( buffer, 0, byteCount )); decoder->GetChars( buffer, 0, byteCount, chars, 0 ); readData->Append( chars ); // Check for EOF or an empty message. if ( readData->ToString()->IndexOf( L"<EOF>" ) == -1 && byteCount != 0 ) { // We are not finished reading. // Asynchronously read more message data from the server. stream->BeginRead( buffer, 0, buffer->Length, gcnew AsyncCallback( ReadCallback ), stream ); } else { Console::WriteLine( L"Message from the server: {0}", readData ); } } catch ( Exception^ readException ) { e = readException; complete = true; return; } complete = true; }
Available since 2.0