У меня есть вопрос по сокетам в .NET (старая история
В общем, я создаю на сервере сокет, начинаю им "слушать". Когда клиент цепляется к этому сокету - срабатывает коллбэк, указанный в BeginAccept; мы достаем с помощью EndAccept рабочий сокет и обмениваемся данными с клиентом.
Теперь, если серверу вдруг нужно закрыть слушающий сокет (неважно уже, подсоединен клиент или нет), то при вызове Close() снова срабатывает коллбэк, однако, сокет уже разрушен, и я получаю ObjectDisposedException при попытке EndAccept, что не удивительно.
Вопрос. Как закрывать нормально сокет?
Shutdown и Disconnect падают с ошибкой "10057 WSAENOTCONN". Это тоже меня не удивляет :). Ведь сокет только слушает и выдает другие сокеты для обмена данными с клиентами, а сам никуда не коннектился. Конечно, можно отлавливать эти исключения или при входе в коллбэк проверять значение некоего маркера и выходить из него если маркер говорит об отключенном сокете.
В общем, посоветуйте, как правильно разделаться с закрытием?
Правило №2: не смотреть в телескоп на солнце оставшимся глазом.