У меня есть приложение, которое подключается к хосту, который может не работать. Если хост не работает, я не хочу ждать около 30 секунд до истечения времени ожидания. Сейчас использую блокирующие сокеты.
Я смотрел socket.poll () и socket.select (), но я бы предпочел просто установить время на сокете. Я не возражаю, если это настройка, которую я должен сделать где-нибудь в системе. Кроме того, я, кажется, понял, что опрос и выбор не работают с коммуникацией, ориентированной на соединение - это правильно?
Если это абсолютно невозможно, как лучше всего получить желаемые результаты с помощью опроса, выбора или какой-либо другой техники?





См. BeginConnect и Обзор асинхронного программирования.
IAsyncResult asr = socket.BeginConnect( ip, port, null, null );
bool res = asr.AsyncWaitHandle.WaitOne( 10000, true ); // 10 sec timeout
Обновление: есть лучший пример здесь.