套接字服务器因未处理的异常而崩溃

时间:2010-05-21 11:16:25

标签: c# .net sockets

我们有一个c#(3.5框架)套接字服务器,它是一个控制台应用程序,经过大约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   区域设置ID:2057

错误应用程序app_name.exe,版本1.0.0.0,时间戳0x4bf56a0c,错误模块mscorwks.dll,版本2.0.50727.4200,时间戳0x4a9ee32d,异常代码0xc0000005,错误偏移0x00000000001c89ca,进程ID 0x%9,应用程序启动时间0X%10

.NET Runtime版本2.0.50727.4200 - 致命执行引擎错误(000007FEF8E4664E)(80131506)

2 个答案:

答案 0 :(得分:1)

您的程序因访问冲突而死亡。虽然没有确凿的证据,但这很可能发生在垃圾收集器或终结器线程运行时。哪个会使例外无法捕捉。

这几乎总是由堆损坏引起的。 非常不太可能是导致损坏的.NET Socket代码,该代码已被数十亿次测试。虽然你给它一个很好的锻炼。更可能的原因是程序使用的某种非托管代码。某种COM服务器,也许你是P / Invoke的东西。它也可能是某种机器的插件,如病毒扫描程序。

找到真正的原因将很困难。从环境开始,在安全模式下启动Windows并提供网络支持。运行SysInternals的AutoRuns实用程序以禁用自动启动的内容。祝你好运,你需要它。

答案 1 :(得分:0)

我猜你使用的是Async方法而不是Begin / End。

当您完成Dispose()后,您是否在SocketAsyncEventArgs上致电了{{1}}?我发现,如果你不这样做,并继续分配新的,那么你出于某种原因咀嚼内存,它们似乎没有被收集......我发现这是一个真正的问题,在高处有大量的读/写操作连接数。