/ / Чи нормально ковтати SocketExceptions у деяких ситуаціях? - c#, сокети

Чи добре в деяких ситуаціях проковтнути SocketExceptions? - c #, розетки

Скажімо, я запрограмував додаток, якийпідключається до сервера за допомогою класу розетки (TCP). Якщо під час читання або запису я зіткнувся з винятком SocketException, то, очевидно, мені доведеться запустити програму відключення, щоб змінити стан програми на Відключений.

Але що, якщо я почав відключатися, і поки я прибираю, відбувається виняток SocketException?

Виняток SocketException для мене насправді нічого не означає, оскільки я все одно збирався сам вимкнути сокет .. тож це нормально проковтнути?

Я дійсно хочу знати, яка найкраща практика для цієї ситуації.

Відповіді:

0 для відповіді № 1

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

Половину часу, коли я надсилаю дзвінок асинхронно, тому, якщо відбувається розрив зв’язку, я не дізнаюся про це, доки не вийде тайм -аут, тоді я отримую виняток із тайм -аутом, який я ігнорую.


2 для відповіді № 2

Бувають ситуації, коли винятком є"нормальний" випадок. Якщо я добре пам'ятаю, у деяких протоколах (SMTP) клієнти (можуть) відключатись, коли вони будуть готові, не надсилаючи належну команду Close. З боку сервера ви завжди отримуєте виняток, який, як відомо, нешкідливий.

Але переконайтеся, що ви відкидаєте лише певний тип винятку у певному місці.


1 для відповіді № 3

Вам все одно потрібно ковтати, особливо коли ви розробляєте механізм повторної спроби. Правильно? Якщо ви не проковтнули першу помилку, як ви можете ініціалізувати другу спробу?


0 для відповіді № 4

Якщо під час відключення щось піде не так, то в якому стані буде розетка? У найгіршому випадку у віддаленої розетки буде час очікування. Ви дійсно не можете нічого зробити, щоб виправити цю ситуацію.

Але, як сказав Джо Р, зареєструйте повідомлення - ці винятки також можуть виникнути через те, що Disconnect() вам дзвонять двічі, про що вам хочеться знати. (Змінити: не знаю, чи це викличе виняток, але я сподіваюся, що ви розумієте, що я маю на увазі: P)