完成端口模型 来自 小猪博文  http://blog.csdn.net/piggyxp/article/details/6922277 自己增加了 postsend 、dosend  和一些错误处理 ,正常情况下不会存在什么问题  但是现在还是存在一种情况:当客户端丢失连接,再进行连接的时候 内存会增长,在博文评论也看到有人 提到这个问题 ,但最后好像并没有什么定论 我猜想的是:假如客户端连接丢失 而socket有事件并未处理完成 就是说 仍有程序内存被系统锁定 ,系统最后会超时 返回失败 所以这块内存一直没有被释放掉  但是真实是怎样的情况并不清楚 所以特来请教 

解决方案 »

  1.   

    VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
      

  2.   

    TCP客户端连接非正常断开情况下,server端是检查不到的,可以采用心跳机制判断客户端状态,客户端可以使用保活连接
      

  3.   

    我有心跳机制 点不在这 在异步发送阶段对于 程序内存锁定 这块
    内存锁定和具体的投递方式有关
    如果socket被关闭,则该socket相关的投递对象都会返回
    之前看到有相关文章说,存在socket被关闭后,投递对象长时间未及时返回的情况
    实测如果每路连接保证同一时刻仅有一个投递对象,
    则可以避免这种情况发生
      

  4.   

    你心跳机制检查到异常端开的时候,就要主动关闭socket连接,释放与之绑定的所有内存。
      

  5.   

    哇 大神诶  仰慕已久诶  代码略长 我代码就贴博文里 能帮着看看嘛 嘿嘿
    http://blog.csdn.net/tingtings324/article/details/54577077
      

  6.   

    我有心跳机制 点不在这 在异步发送阶段对于 程序内存锁定 这块
    内存锁定和具体的投递方式有关
    如果socket被关闭,则该socket相关的投递对象都会返回
    之前看到有相关文章说,存在socket被关闭后,投递对象长时间未及时返回的情况
    实测如果每路连接保证同一时刻仅有一个投递对象,
    则可以避免这种情况发生嗯 单个投递对象 会影响性能吧
      

  7.   

    “池”化所有资源(内存、socket、……) ?
      

  8.   

    只要在主循环中还有对任何资源(内存、socket、句柄、线程、GDI对象、User对象、数据库连接、……)的申请释放,都不算严格意义上的“池”化了所有资源。