gpt4 book ai didi

c - Recv 环形缓冲区与简单缓冲区

转载 作者:可可西里 更新时间:2023-11-01 02:52:47 25 4
gpt4 key购买 nike

我正在开发客户端-服务器应用程序。我的应用程序使用可变大小的数据包,每个数据包都有一个 header 和可变长度的有效负载。

我的难题是在执行 recv 时处理数据包的最佳方法是什么。我遇到的大多数教程都建议使用环形缓冲区,但据我所知,使用大小是您可以处理的最大数据包大小两倍的缓冲区会更有效。

如果我使用环形缓冲区,我需要一个额外的缓冲区用于接收,然后我需要将缓冲区复制到环形缓冲区中,这意味着我需要执行一两个 memcpys 以将缓冲区插入环形缓冲区中

如果我使用单缓冲区方法,我只需要一个缓冲区,我可以将其传递给 recv 调用和一个 memmove 调用,以便在我得到一个完整的数据包并且仍然有数据属于另一个数据包时将数据移动到缓冲区的开头在缓冲区中。

我是不是弄错了什么?

附言。如果您能指出任何处理可变长度数据包的源代码/示例,那将很有帮助。

最佳答案

If I use a ring buffer I need an additional buffer for recv and then I need to copy the buffer in the ring buffer which means I need to do one or two memcpys to insert the buffer in the ring buffer

是的,两次读取和写入,没什么大不了的 (*)。但是您不需要额外的缓冲区。对于读取,只需最大化读取到环形缓冲区末尾的剩余空间。

(*):如果您担心额外系统调用的成本,对于分散/聚集读/写有recvmsgsendmsg

关于c - Recv 环形缓冲区与简单缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com