Можно ли проглотить исключения SocketException в некоторых ситуациях? - PullRequest
3 голосов
/ 14 мая 2010

Допустим, я запрограммировал приложение, которое подключается к серверу с помощью класса сокетов (TCP). Если я сталкиваюсь с SocketException во время чтения или записи, то, очевидно, мне нужно пойти дальше и запустить процедуру отключения, чтобы изменить состояние приложения на Отключено.

Но что, если я начал отключаться, а во время очистки возникает исключение SocketException?

SocketException на самом деле ничего не значит для меня, так как я все равно собирался отключить сокет ... так нормально ли его проглотить?

Я действительно хочу знать, как лучше всего справиться с этой ситуацией.

Ответы [ 4 ]

2 голосов
/ 14 мая 2010

Бывают ситуации, когда исключением является «нормальный» случай. Если я правильно помню, в некоторых протоколах (SMTP) клиенты будут (могут) отключаться, когда они будут готовы, без отправки правильной команды Close. На стороне сервера вы всегда получаете исключение, которое, как известно, безвредно.

Но убедитесь, что вы выбрасываете только определенный тип исключения в определенном месте.

1 голос
/ 14 мая 2010

Вам все еще нужно проглотить некоторые, особенно когда вы разрабатываете механизм повтора. Правильно? Если вы не проглотили первый сбой, как вы можете инициализировать вторую попытку?

0 голосов
/ 14 мая 2010

Если при отключении что-то пойдет не так, то в каком состоянии будет розетка?В худшем случае время ожидания сокета истекает.На самом деле вы ничего не можете сделать, чтобы исправить эту ситуацию.

Но, как сказал Джо Р., запишите сообщение - эти исключения могут также возникать, потому что Disconnect() вызывается дважды, что вам и нужнознать о.(Изменить: не знаю, приведет ли это к исключению, но я надеюсь, вы понимаете, что я имею в виду: P)

0 голосов
/ 14 мая 2010

Я постоянно игнорирую исключения сокетов, как с .net сокетами, так и с WCF.

В половине случаев я отправляю вызов асинхронно, поэтому, если происходит разрыв соединения, я не узнаю об этом, пока не истечет время ожидания, и в этот момент я получаю исключение времени ожидания, которое игнорирую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...