Я пишу библиотеку обмена мгновенными сообщениями. В настоящее время, когда возникает SocketException при чтении или записи в сокет, я запускаю процедуру выхода из приложения, передавая SocketException конечному пользователю в качестве аргумента LogoutEventArgs. Это дает конечному пользователю возможность увидеть, какое базовое исключение фактически вызвало незапрошенный выход из системы.
Мой вопрос: что мне делать, если во время пользовательского вызова функции выхода из системы сокет фактически выдает исключение.
Пример. Конечный пользователь вызывает функцию выхода из системы, и пока функция выхода ожидает корректного завершения существующих запросов, сокет выдает исключение в потоке чтения.
У меня есть два варианта, как я это вижу -
Притворитесь, что ошибки не произошло, и просто действуйте так, как будто сокет отключен как часть нашего выхода из системы.
Когда возникает исключение сокета, посмотрите, выполняется ли запрос на выход из системы, и если да, переопределите его. В результате первоначальный запрос на выход выдает исключение ужеLoggedOutException, а также отдельное событие выхода, которое передает исключение в LogoutEventArgs.
Кроме того, немного связано. Что мне делать, если сервер инициирует отключение, которое не было запрошено (т.е. вызов чтения возвращает значение null). Сервер .NET Messenger имеет тенденцию делать это, если вы отправляете ему запрос не любит. Отношусь ли я к этому как к исключению?
Я обнаружил, что вся часть отключения/выхода из моей библиотеки является серьезной занозой в моей стороне. Я просто не могу уложить это в голове. Кто-нибудь знает какие-либо приложения с открытым исходным кодом, которые прекрасно справляются с этой ситуацией?
Я так долго пытался разобраться с этим в своей голове, что это сводит меня с ума.