深度剖析WinPcap之(九)――数据包的发送过程(14)(完)

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);
而在N PF_SendComplete 函数中递减
InterlockedDecrement(&Open->Multiple_Write_Counter);
而在NPF_WaitEndOfBufferedWrite函数中只到Open->Multiple_Write_Counter0时,将结束for循环,退出函数。

你可能感兴趣的:(职场,休闲,winpcap)