代码之家  ›  专栏  ›  技术社区  ›  r0u1i

当远程主机强制关闭插座时处理泄漏?(.net)

  •  0
  • r0u1i  · 技术社区  · 15 年前

    我捕获ConnectionReset并以关闭套接字时的相同方式处理套接字(插座。关机以及插座关闭). 有人遇到这样的问题吗? ConnectionReset异常是在我执行套接字。读取,如果有关系的话。

    编辑:微软的DebugDiag工具建议这些是MSCORLIB创建的事件处理程序。不用说,我并没有直接创建它们(但是它们是由.net库在某处创建的)

    2 回复  |  直到 15 年前
        1
  •  1
  •   Sekhat    15 年前

    插座.接收器以及套接字。写入不幸的是,当另一端强行关闭插座而不是正确关闭插座时,它们是唯一可以检测到的地方。

    Socket.Close() 应该(根据我的智能感知)释放套接字句柄。

    所以首先要确定 真的被召唤了。然后检查其他地方是否有手柄泄漏,您是否使用了需要处理但没有处理的对象?例如打开 FileStream 什么?

        2
  •  -1
  •   Tarnschaf    15 年前

    插座。关上应释放与套接字关联的所有托管和非托管资源。

    但你也试过

    socket = null;
    

    也许(在那之后)用

    GC.Collect();
    

    另一个想法: 如何监控手柄泄漏?操作系统可能会在内存中长时间(分钟)保持关闭的TCP连接,这是正常行为。

    推荐文章