Вы можете синхронно опрашивать сокет с любым временем ожидания.Если Poll()
возвращает true
, вы можете быть уверены, что можете позвонить на Receive()
, который не будет блокироваться.
Socket s;
// ...
// Poll the socket for reception with a 10 ms timeout.
if (s.Poll(10000, SelectMode.SelectRead))
{
s.Receive(); // This call will not block
}
else
{
// Timed out
}
Я рекомендую прочитать главы 6 Стивенса «Сетевое программирование UNIX» и16 для более подробной информации об использовании неблокирующих сокетов.Несмотря на то, что в названии книги написано UNIX, общая архитектура сокетов практически одинакова в UNIX и Windows (и .net)