Установка времени ожидания отправки / получения сокета менее 500 мс в .NET

В соответствии с документацией MSDN невозможно установить значение Socket.SendTimeout менее 500 мс:http: //msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeou То же правило действует для Socket.ReceiveTimeout (даже если оно не упомянуто в документации MSDN, это правда, так как оба случая были проверены практически).

Существуют ли другие способы тайм-аута операции приема сокета, если, например, она занимает более 10 мс?

Ответы на вопрос(1)

Send() а такжеReceive() звонки блокируют поток программы, пока данные не были отправлены, получены или произошла ошибка.

Если вы хотите лучше контролировать свои звонки, есть несколько доступных механизмов. Самое простое - это использоватьPoll().

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
}

Вы также можете использоватьSelect(), BeginReceive() илиReceiveAsync() для других типов поведения.

Я рекомендую прочитать главы 6 и 16 сетевого программирования UNIX Стивенса для получения более подробной информации об использовании неблокирующих сокетов. Несмотря на то, что в названии книги указано UNIX, общая архитектура сокетов практически одинакова в UNIX и Windows (и .net

ВАШ ОТВЕТ НА ВОПРОС