При использовании Socket
для TCP попытка чтения данных при потере соединения приведет к исключению. Я привык использовать исключения, чтобы знать, когда происходит сбой операции TCP, поскольку вы не можете с уверенностью сказать, что соединение разорвано, за исключением попыток чтения / записи.
Но я только что заметил, что NetworkStream.DataAvailable
просто возвращает false
в этом случае, и TcpClient.GetStream
также успешно возвращается. У меня есть код, подобный следующему (используется в опросе-l oop) - есть ли способ расширить этот подход для обнаружения сбойных соединений?
public int Read()
{
var stream = tcp.GetStream();
if (!stream.DataAvailable)
return 0;
else
return stream.Read(InBuffer, 0, InBuffer.Length);
}
Если нет, то мне придется вызвать один из Read
методы, использующие тайм-аут - что заставляет меня задаться вопросом, в чем смысл DataAvailable
, так как это может легко привести к ошибкам, когда не удалось обнаружить неудачные соединения.