Я получил поток клиента TCP, который читается через асинхронный вызов NetworkStream.BeginRead (передача делегата асинхронного обратного вызова).Проблема заключается в обнаружении, когда соединение не работает.В настоящее время, если соединение разорвано, вызов BeginRead просто исчезает в эфире - обратный вызов просто не вызывается.Если приложение попытается отправить поток, пока он выключен, вызывает обратный вызов, и NetworkStream.EndRead выдает исключение - это нормально - но если отправка не выполняется, приложение просто сидит в темноте, не подозревая, чтосоединение разорвано.
Изначально я увидел, что NetworkStream.ReadTimout не был установлен (т. е. был по умолчанию Timout.Infinite) - но установка этого значения (скажем, 3000 мс) не помогла.[Редактировать: в документе MSDN четко указано, что ReadTimeout применяется только к синхронному вызову Read, а не к asyn BeginRead - я должен был проверить это более тщательно ранее :-(]
Как определить, что клиентское соединение не удалось?
Нужно ли опрашивать базовый сокет, как показано в этом вопросе SO ?
Кроме того: Когда физически восстанавливается соединение, обратный вызовдо сих пор не звонят - мы просто сидим и ждем в эфире, пока не попробуем отправить.