Обработка сокетов C# – как установить тайм-аутC#

Место общения программистов C#
Ответить
Anonymous
 Обработка сокетов C# – как установить тайм-аут

Сообщение Anonymous »

Я унаследовал код, который явно ужасен с точки зрения синтаксиса, логики и знаний. Я должен предположить, что приведенный ниже код также ужасен, потому что это был тот же разработчик, но я не эксперт по сокетам, поэтому хочу понять, почему был написан этот код. Надо было сделать по-другому?
Приведенный ниже _socket берется из TcpListener.AcceptSocket(), а затем сразу после этого вызывается эта функция. Здесь меня очень многое смущает.
Во-первых, зачем устанавливать Blocking = true? Разве не правда, что после того, как сокет принят, он все равно больше не блокируется?
В конечном итоге я хочу сделать следующее: дать сокету X секунд для выполнения задачи, после чего время ожидания истекает. Я знаю, что клиенты уже установили для этого свой тайм-аут, но здесь, на сервере, я знаю, что тайм-ауты полезны для предотвращения исчерпания сокетов. Близок ли приведенный ниже код к корректной настройке? Таймаута приема нет. Это всего лишь очень странный код, как и вся остальная работа, которую мне пришлось разобрать.
public void ConfigureSocket()
{
int timeout = 500; // in milliseconds
_socket.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.SendTimeout, timeout );
_socket.Blocking = true;

_socket.SendTimeout = 1000;
_socket.SendBufferSize = 8192;
_socket.LingerState = new LingerOption( true, 10 );
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»