Я унаследовал код, который явно ужасен с точки зрения синтаксиса, логики и знаний. Я должен предположить, что приведенный ниже код также ужасен, потому что это был тот же разработчик, но я не эксперт по сокетам, поэтому хочу понять, почему был написан этот код. Надо было сделать по-другому?
Приведенный ниже _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 );
}