swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1415回复:3

问一个很棘手的问题,send内存释放问题,见内!

楼主#
更多 发布于:2002-07-15 09:43
关于注册假协议(passthru可能也有这个问题):

在调用hook出来的tcpip的send把数据包送上去之后,如果系统接收了这个包,它就会调用sendcomplete把数据包返回,如果系统把数据包丢掉了(如果在ip层把数据包丢掉),系统是不是还会调用sendcomplete把数据包返回?

我遇到的问题是这样的,我用一个内存池,来一个包就分一块内存,当在sendcomplete时,再把内存释放,可是这个内存池却越来越小,当数据量大的时候,就会出现内存池用完的情况,所以我想如果系统在ip层把数据包丢掉了,它可能就不会调用sendcomplete来把数据包返回,如果是这样,我怎么知道系统是否把数据包丢弃了?(我好释放我的内存)

请大侠指点!
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-15 10:10
我想了,也有可能是重发包,比如一个包被重发了几次,可能我就用了几个send内存池的包,但sendcomplete就可能只调用一次,这也可能是引起内存池越来越小的原因!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-15 11:16
关于注册假协议(passthru可能也有这个问题):

在调用hook出来的tcpip的send把数据包送上去之后,如果系统接收了这个包,它就会调用sendcomplete把数据包返回,如果系统把数据包丢掉了(如果在ip层把数据包丢掉),系统是不是还会调用sendcomplete把数据包返回?

我遇到的问题是这样的,我用一个内存池,来一个包就分一块内存,当在sendcomplete时,再把内存释放,可是这个内存池却越来越小,当数据量大的时候,就会出现内存池用完的情况,所以我想如果系统在ip层把数据包丢掉了,它可能就不会调用sendcomplete来把数据包返回,如果是这样,我怎么知道系统是否把数据包丢弃了?(我好释放我的内存)

请大侠指点!


faint,你是不是理解错了,SendHandler是协议向NIC发送数据包。

NIC不管发没发出去只要SendHandler是返回PENDING都要调用ProtocolSendComplete来通知协议发送完成并告诉协议有没有发送成功.
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-15 12:56
哦,知道了,谢谢gjp,分给你,
唉,现在只能每次20分了!

原来是我的一个全局变量在做怪,全局变量还得小心点用哦!
游客

返回顶部