Сбой сокета сервера с необработанным исключением - PullRequest
0 голосов
/ 21 мая 2010

У нас есть сокет-сервер c # (3.5 framework), который является консольным приложением, после примерно 3000 соединений (или меньше, это довольно случайное) мы получаем необработанное исключение, которое полностью завершает работу приложения.

Мы действительно изо всех сил пытаемся выяснить, что происходит и где, единственная информация, которую мы получаем ниже, может кто-нибудь пролить какой-нибудь свет? Следует отметить, что ВСЕ завернуто в try catch {}

Описание: Перестал работать

Подпись проблемы: Название проблемного события: CLR20r3 Проблема Подпись 01: qrushrserver.exe Проблема Подпись 02: 1.0.0.0 Проблема Подпись 03: 4bf56a0c Проблема Подпись 04: Система Проблема Подпись 05: 2.0.0.0 Проблема Подпись 06: 49cc5ec9 Проблема Подпись 07: 2c0b Проблема Подпись 08: 40 Проблема Подпись 09: System.Net.Sockets.Socket Версия ОС: 6.0.6002.2.2.0.1296.17 Код региона: 2057

Неисправное приложение app_name.exe, версия 1.0.0.0, отметка времени 0x4bf56a0c, неисправный модуль mscorwks.dll, версия 2.0.50727.4200, отметка времени 0x4a9ee32d, код исключения 0xc0000005, смещение ошибки 0x00000000001c89ca, идентификатор процесса 0x% 9, время запуска приложения 0x% 10.

.NET Runtime версия 2.0.50727.4200 - Неустранимая ошибка механизма выполнения (000007FEF8E4664E) (80131506)

Ответы [ 2 ]

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

Ваша программа умирает из-за нарушения прав доступа. Хотя нет убедительных доказательств, это, скорее всего, произошло во время работы сборщика мусора или потока финализатора. Что сделало бы исключение неуловимым.

Это почти всегда вызвано повреждением кучи. очень маловероятно, что именно код .NET Socket вызвал повреждение, этот код был проверен миллиарды раз. Хотя вы даете ему хорошую тренировку. Гораздо более вероятная причина - какой-то неуправляемый код, используемый вашей программой. Какой-то COM-сервер, возможно, вы P / Invoke что-то. Это также может быть какая-то надстройка к машине, например, антивирусный сканер.

Найти истинную причину будет сложно. Начните с окружающей среды, загрузите Windows в безопасном режиме с поддержкой сети. Запустите утилиту автозапуска SysInternals, чтобы отключить все, что запускается автоматически. Удачи вам, вам это понадобится.

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

Полагаю, вы используете методы Async, а не Begin / End.

Вы звоните Dispose() на свой SocketAsyncEventArgs, когда закончите с ними? Я обнаружил, что если вы этого не сделаете и продолжаете выделять новые, то по какой-то причине вы прожорливаете память, а они, кажется, не собираются ... Я обнаружил, что это реальная проблема с большим количеством операций чтения / записи при высокой количество соединений.

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