public int Read(byte[] buffer, int offset, int length, int timeout_ms)
{
if (!WaitForConnection(timeout_ms)) return -BacnetMstpProtocolTransport.ETIMEDOUT;
if (m_current_read == null)
{
try
{
m_current_read = m_conn.BeginRead(buffer, offset, length, null, null);
}
catch (Exception)
{
Disconnect();
return -1;
}
}
if (m_current_read.IsCompleted || m_current_read.AsyncWaitHandle.WaitOne(timeout_ms))
{
try
{
int rx = m_conn.EndRead(m_current_read);
m_current_read = null;
return rx;
}
catch (Exception)
{
Disconnect();
return -1;
}
}
else
return -BacnetMstpProtocolTransport.ETIMEDOUT;
}