深度剖析WinPcap之(九)——数据包的发送过程(14)(完)
2010-06-23 10:56
267 查看
本文转自http://eslxf.blog.51cto.com/918801/223813
VOID NPF_WaitEndOfBufferedWrite(POPEN_INSTANCE Open)
{
UINT i;
NdisResetEvent(&Open->WriteEvent);
for(i=0;
Open->Multiple_Write_Counter > 0 && i < TRANSMIT_PACKETS;
i++
)
{
NdisWaitEvent(&Open->WriteEvent, 100);
NdisResetEvent(&Open->WriteEvent);
}
return;
}
其中TRANSMIT_PACKETS为发送缓冲池中最大的数据包数目,定义为256个。
Open->Multiple_Write_Counter表示挂起的待发数据包个数,其值在NPF_BufferedWrite函数种递增
InterlockedIncrement(&Open->Multiple_Write_Counter);
而在NPF_SendComplete函数中递减
InterlockedDecrement(&Open->Multiple_Write_Counter);
而在NPF_WaitEndOfBufferedWrite函数中只到Open->Multiple_Write_Counter为0时,将结束for循环,退出函数。
1.8.3.3 NPF_WaitEndOfBufferedWrite函数
函数等待NPF_BufferedWrite所有的发送执行完成,返回用户控制。VOID NPF_WaitEndOfBufferedWrite(POPEN_INSTANCE Open)
{
UINT i;
NdisResetEvent(&Open->WriteEvent);
for(i=0;
Open->Multiple_Write_Counter > 0 && i < TRANSMIT_PACKETS;
i++
)
{
NdisWaitEvent(&Open->WriteEvent, 100);
NdisResetEvent(&Open->WriteEvent);
}
return;
}
其中TRANSMIT_PACKETS为发送缓冲池中最大的数据包数目,定义为256个。
Open->Multiple_Write_Counter表示挂起的待发数据包个数,其值在NPF_BufferedWrite函数种递增
InterlockedIncrement(&Open->Multiple_Write_Counter);
而在NPF_SendComplete函数中递减
InterlockedDecrement(&Open->Multiple_Write_Counter);
而在NPF_WaitEndOfBufferedWrite函数中只到Open->Multiple_Write_Counter为0时,将结束for循环,退出函数。
相关文章推荐
- 深度剖析WinPcap之(九)――数据包的发送过程(14)(完)
- 深度剖析WinPcap之(九)——数据包的发送过程(7)
- 深度剖析WinPcap之(九)――数据包的发送过程(9)
- 深度剖析WinPcap之(九)——数据包的发送过程(8)
- 深度剖析WinPcap之(九)――数据包的发送过程(1)
- 深度剖析WinPcap之(九)――数据包的发送过程(10)
- 深度剖析WinPcap之(九)——数据包的发送过程(1)
- 深度剖析WinPcap之(九)——数据包的发送过程(9)
- 深度剖析WinPcap之(九)――数据包的发送过程(2)
- 深度剖析WinPcap之(九)――数据包的发送过程(11)
- 深度剖析WinPcap之(九)——数据包的发送过程(2)
- 深度剖析WinPcap之(九)——数据包的发送过程(10)
- 深度剖析WinPcap之(九)――数据包的发送过程(3)
- 深度剖析WinPcap之(九)――数据包的发送过程(4)
- 深度剖析WinPcap之(九)――数据包的发送过程(12)
- 深度剖析WinPcap之(九)——数据包的发送过程(3)
- 深度剖析WinPcap之(九)——数据包的发送过程(11)
- 深度剖析WinPcap之(九)――数据包的发送过程(5)
- 深度剖析WinPcap之(九)――数据包的发送过程(13)
- 深度剖析WinPcap之(九)——数据包的发送过程(4)