【发布时间】:2012-04-04 05:15:25
【问题描述】:
我正在开发一个客户端-服务器应用程序。我的应用正在处理可变大小的数据包,每个数据包都有一个标头和一个可变长度的有效负载。
我的困境是在进行 recv 时处理数据包的最佳方法是什么。 我遇到的大多数教程都建议使用环形缓冲区,但据我所知,使用大小是您可以处理的最大数据包大小两倍的缓冲区更有效。
如果我使用环形缓冲区,我需要一个用于 recv 的额外缓冲区,然后我需要将缓冲区复制到环形缓冲区中,这意味着我需要执行一两个 memcpys 以将缓冲区插入到环形缓冲区中
如果我使用单缓冲区方法,我只需要一个缓冲区,我可以将它传递给 recv 调用和一个 memmove 调用,以便在我得到一个完整的数据包并且仍然有属于另一个数据包的数据时将数据移动到缓冲区的开头在缓冲区中。
我是不是搞错了什么?
附言。如果您能指出任何处理可变长度数据包的源代码/示例,那将很有帮助。
【问题讨论】:
-
@KarolyHorvath 它是 TCP
标签: c sockets tcp circular-buffer