阅读:1194回复:3
Ndis中如何处理接收到数据?
int CheckRecvBuffer(IN OUT PVOID HeaderBuffer,
IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize) { PETHERNET_FRAME pEthernetFrame = 0; WORD ethernetFrameType = 0; PIP_HEADER pIpHeader = 0; UINT ipHeaderLen = 0; PVOID pIpData = NULL; if(HeaderBuffer && (HeaderBufferSize >= ETHERNET_FRAME_LENGTH)) { pEthernetFrame = (PETHERNET_FRAME)HeaderBuffer; ethernetFrameType = ntohs(pEthernetFrame -> FrameType); if(ETHERNET_FRAME_TYPE_TCPIP == ethernetFrameType && LookaheadBufferSize > IP_HEADER_LENGTH && LookAheadBuffer != NULL) { pIpHeader = (PIP_HEADER)LookAheadBuffer; ipHeaderLen = GET_IP_HEADER_LENGTH(pIpHeader->VersionAndHeaderLength); if(LookaheadBufferSize - ipHeaderLen > 0) { pIpData = (PVOID)((BYTE*)LookAheadBuffer + ipHeaderLen); changeIpData(pIpData,pIpHeader->Protocol); } else // 有可能出现该情况吗?出现了又如何去做呢? } } return XF_SUCCESS; } 我仅想得到ip报头后tcp数据报头第一个字节数据, 是否有LookaheadBufferSize <= IP_HEADER_LEN 的情况? 还是永远LookaheadBufferSize > IP_HEADER_LEN? [编辑 - 6/13/05 by cyliu] [编辑 - 6/13/05 by cyliu] |
|
|
沙发#
发布于:2005-06-14 14:13
LookaheadBufferSize > IP_HEADER_LEN
|
|
|
板凳#
发布于:2005-06-14 14:39
1000M/100M/10M这种自适应的网卡有什么特殊处理吗?
|
|
|
地板#
发布于:2005-06-15 11:08
在ReceiveHandler涵数中,
if (LookaheadBufferSize < PacketSize) 会调用TransferDataHandler,在TransferDataHandler中获得Packet是否不在包含ReceiveHandler接收到的数据,如Frame头,IP头等,仅是ReceiveHandler没有接收完的剩余数据? 为什么会出现LookaheadBufferSize < PacketSize情况呢? |
|
|