阅读:2554回复:9
passthru ptreceive 函数中packet==NULL时什么办?
大家好,现在正在研究passthru。解决了mpsend方面的问题。现在正在搞ptreceive。前面我调试时发现packet!=NULL,很好处理。但是现在好像所有的packet全是NULL了!
我不知道怎么得到接受到的packet。下面是一个输出: PtReceive:LookAheadBufferSize=175,PacketSize=347 有时候,这两个数是相等的。请问在packet==null时怎么处理这个packet!可以直接调用NdisTransferData函数? 有没有相关的例子可以参考? 谢谢!!! |
|
沙发#
发布于:2003-05-20 20:21
这时候就要看lookaheadbuffer和packetsize了,如果lookaheadbuffersize>=packetsize,这时已经收到了完整的数据报,
分配内存然后拷贝进去,组包向上面递交可以了. 然后如果是小于,就要调用transferdata来传递剩下的部分,注意内存的分配和释放. |
|
板凳#
发布于:2003-05-20 20:35
谢谢你的回答!如果lookaheadbuffersize<packetsize,应该调用哪个函数?我调用了一个ndisgatedata,结果兰平了.好像参数不对.能不能再说得详细一些?
再次感谢! |
|
地板#
发布于:2003-05-21 08:25
估计你的内存没有处理好,前面的帖子有很多讨论到这个问题,好好查查.
|
|
地下室#
发布于:2003-05-21 08:56
调用ndistransferdata
|
|
|
5楼#
发布于:2003-05-26 07:43
对于数据包接受,
用过 Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext); 如果得到完整的包 是不是就不用考虑 PacketSize<=LookAheadBufferSize的情况? |
|
6楼#
发布于:2003-05-26 09:04
对于数据包接受, -不是,先判断packetsize和lookaheadbuffersize的大小,然后在作处理。 |
|
|
7楼#
发布于:2003-05-26 10:28
关于这个问题的研究,论坛上不要太多啊,你好好找找吧!
这里有讲原因和解决方法: http://www.driverdevelop.com/forum/viewthread.php?fid=10&tid=8559&page=1&totalpost=26 |
|
|
8楼#
发布于:2003-05-26 10:38
也就是说只要处理两种情况:
PacketSize <= LookAheadBufferSize//要么通过NdisGetReceivedPacket取到数据包;要么采用内存拷贝的方式取得数据(这种方式如何处理系统分配的内存) PacketSize 〉 LookAheadBufferSize调用ndistransferdata |
|
9楼#
发布于:2003-05-29 09:03
谢谢大家的帮助!终于可以初步解决这个问题了。好像还有内存泄漏的问题,还要再仔细测试一下。但是已经可以处理packet==
NULL的情况了!以后大家多多交流! |
|