阅读:1600回复:6
packet历程中发送的问题
在packet历程中数据发送的部分(write.c)中,每次发送数据包都是先
NdisAllocatePacket( &Status, &pPacket, pDevExt->PacketPool ); return STATUS_INSUFFICIENT_RESOURCES; } RESERVED(pPacket)->Irp=Irp; NdisChainBufferAtFront(pPacket,Irp->MdlAddress); 然后在SendComplete里面 NdisFreePacket(pPacket); 如果我想把同一个数据包发送多次,可不可以重复调用NdisSend,而不每次都NdisAllocatePacket呢?我在最后全部发送完成的SendComplete里在统一的NdisFreePacket,可以么? 还有我在pDevExt->PacketPool的时候指定长度为16,因此我在重复发送数据包的时候很快就会把PacketPool分配光了(因为在SendComplete里才释放,而当我发送长包的时候,sendcomplete经常要过很久才能被调用似的),不知大家有什么解决的办法么? 其实我感觉我的思路可能有问题,我总觉得重复发包不应该是这种模式,可是我对ndis理解不多,大家有什么好办法,提示一下我吧 :( :( :( [编辑 - 11/1/02 by Buddha] |
|
|
沙发#
发布于:2002-11-01 17:36
在packet历程中数据发送的部分(write.c)中,每次发送数据包都是先 你需要的这种情况下, Packet是必须的要重新分配的,PACKET内的BUFFER是不必的, |
|
|
板凳#
发布于:2002-11-01 17:41
你需要的这种情况下, 怎么解释? PACKET内的BUFFER是不必的 我每次都在pDevExt->PacketPool中重新分配一个pPacket,但我觉得这样是不是会影响我的效率? 而且足要的问题是我的pDevExt->PacketPool是有限的(16个),每次都分配很快就分光了呀 |
|
|
地板#
发布于:2002-11-01 19:41
如果不NdisFreePacket(pPacket);只能发几个包,然后必然死记,很奇怪,要么你就不能,为什么要发4,5个才死呢?
|
|
|
地下室#
发布于:2002-11-01 21:28
[quote]你需要的这种情况下, 怎么解释? PACKET内的BUFFER是不必的 我每次都在pDevExt->PacketPool中重新分配一个pPacket,但我觉得这样是不是会影响我的效率? 而且足要的问题是我的pDevExt->PacketPool是有限的(16个),每次都分配很快就分光了呀 [/quote] 这个偶也曾经试过(失败!) “Packet是必须的要重新分配的”,最后还是一个“时空”交换 :D 用一下这有点好处: NdisReinitializePacket NdisSendPackets |
|
|
5楼#
发布于:2002-11-03 18:49
[quote][quote]你需要的这种情况下, 怎么解释? PACKET内的BUFFER是不必的 我每次都在pDevExt->PacketPool中重新分配一个pPacket,但我觉得这样是不是会影响我的效率? 而且足要的问题是我的pDevExt->PacketPool是有限的(16个),每次都分配很快就分光了呀 [/quote] 这个偶也曾经试过(失败!) “Packet是必须的要重新分配的”,最后还是一个“时空”交换 :D 用一下这有点好处: NdisReinitializePacket NdisSendPackets [/quote] 本人语文水平太差了。再加上工作时间回的贴子,所以上次回贴没有表达清楚:( 其实很简单,Packet这个结构果里有着很多关于该包的单独信息,包括公开和NDIS未公开的东西,有的是用来上下层传递包的MEDIUM SPECFICITY,MINIPORT处理包的状态等,所以相互间(Protocol -->ndis-->miniport)关系很复杂。所以不可能像你这样重用。 |
|
|
6楼#
发布于:2002-11-05 09:35
感谢各位的指点,我现在用的是死循环加事件的方式,虽然不死机,可是系统资源占用严重:(
|
|
|