Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Call NetworkStream.Read() Without Blocking?

I'd like to empty read buffer of the socket so I wrote follow code...

byte[] tempBuffer = new byte[1024];
int readCount = 0;
while ((readCount = tcpSocket.GetStream().Read(tempBuffer, 0, tempBuffer.Length)) != 0)
{
    // do with tempBuffer
}

But Read() method is blocked so I added tcpSocket.ReceiveTimeout = 1;. And it works just like before.

As I know, this is usually used in C++. How can I solve this problem?

like image 326
Hongseok Yoon Avatar asked Jan 24 '23 12:01

Hongseok Yoon


2 Answers

You can use the DataAvailable property to see if there is anything to be read before making a call into the Read method.

like image 64
Mark Heath Avatar answered Jan 26 '23 01:01

Mark Heath


Use the NetworkStream.Read() function directly, instead of using GetStream():

If no data is available for reading, the Read method returns 0. The Read operation reads as much data as is available, up to the number of bytes specified by the size parameter. If the remote host shuts down the connection, and all available data has been received, the Read method completes immediately and return zero bytes. NoteNote:

like image 20
David Schmitt Avatar answered Jan 26 '23 02:01

David Schmitt