阅读:1482回复:3
问一个很棘手的问题,send内存释放问题,见内!
关于注册假协议(passthru可能也有这个问题):
在调用hook出来的tcpip的send把数据包送上去之后,如果系统接收了这个包,它就会调用sendcomplete把数据包返回,如果系统把数据包丢掉了(如果在ip层把数据包丢掉),系统是不是还会调用sendcomplete把数据包返回? 我遇到的问题是这样的,我用一个内存池,来一个包就分一块内存,当在sendcomplete时,再把内存释放,可是这个内存池却越来越小,当数据量大的时候,就会出现内存池用完的情况,所以我想如果系统在ip层把数据包丢掉了,它可能就不会调用sendcomplete来把数据包返回,如果是这样,我怎么知道系统是否把数据包丢弃了?(我好释放我的内存) 请大侠指点! |
|
沙发#
发布于:2002-07-15 10:10
我想了,也有可能是重发包,比如一个包被重发了几次,可能我就用了几个send内存池的包,但sendcomplete就可能只调用一次,这也可能是引起内存池越来越小的原因!
|
|
板凳#
发布于:2002-07-15 11:16
关于注册假协议(passthru可能也有这个问题): faint,你是不是理解错了,SendHandler是协议向NIC发送数据包。 NIC不管发没发出去只要SendHandler是返回PENDING都要调用ProtocolSendComplete来通知协议发送完成并告诉协议有没有发送成功. |
|
|
地板#
发布于:2002-07-15 12:56
哦,知道了,谢谢gjp,分给你,
唉,现在只能每次20分了! 原来是我的一个全局变量在做怪,全局变量还得小心点用哦! |
|