首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请帮助我理解此TCP/IP代码片段

请帮助我理解此TCP/IP代码片段
EN

Stack Overflow用户
提问于 2011-02-13 09:54:34
回答 2查看 231关注 0票数 0

我正在读"TCP/IP精益“这本书,我偶然发现了下面这段我不理解的代码。有人能给我解释一下吗?

代码语言:javascript
复制
WORD buff_in(CBUFF *bp, BYTE *data, WORD len)
{
    WORD in, n, n1, n2;
    in = (WORD)bp->in & (bp->len-1); 
    n = minw(len, buff_freelen(bp)); 
    n1 = minw(n, (WORD)(bp->len - in)); 
    n2 = n - n1; 
    if (n1 && data) memcpy(&bp->data[in], data, n1); 
    if (n2 && data) memcpy(bp->data, &data[n1], n2); 
    bp->in += n; 
    return(n);
}
EN

回答 2

Stack Overflow用户

发布于 2011-02-13 10:25:36

你真的应该给这段代码提供更多的上下文。WORD可能有4个字节长,因为这是TCP/IP内部结构。

它似乎与将数据从C缓冲区复制到IPv4数据包有关。两个memcpy调用似乎交换了两个数据块。

如果你能解释一下buff_in的输入应该代表什么,那会很有帮助的。CBUFF有点误导,因为它显然是某种结构。也许只有一个长度的字节后面跟着一个数据缓冲区,但如果你能确定地告诉我们,这将会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-02-13 20:22:48

它似乎正在从data向循环缓冲区bp复制高达len字节的数据。

bp->len是循环缓冲区的长度,必须是2的幂,bp->in是循环缓冲区内的索引,下一个字节将写入该索引。buff_freelen(bp)返回循环缓冲区中的空闲空间量,minw()返回两个参数中的最小值。

n设置为要复制的字节数、提供的len的最小值或目标缓冲区中的空闲空间量。然后,它将其拆分为两个块- n1,它在从bp->data[in]开始并在bp->data[bp->len - 1]之前结束时复制,以及n2 (可能长度为零),它在从bp->data[0]开始时复制。

它前进bp->in并返回n,即复制的字节数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4981944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档