我正在尝试在 Linux 上创建一个 p2p 应用程序,我希望它尽可能高效地运行。
我遇到的问题是管理数据包。众所周知,在任何时候,recv() 缓冲区中都可能有多个数据包,因此需要某种消息帧系统来确保多个数据包不会被视为一个大数据包。
所以目前我的数据包结构是:
(u16int Packet Length):(Packet Data)
这需要两次调用 recv(); 一个获取数据包大小,一个获取数据包。
这有两个主要问题:
1. A malicious peer could send a packet with a size header of
something large, but not send any more data. The application will
hang on the second recv(), waiting for data that will never come.
2. Assuming that calling Recv() has a noticeable performance penalty
(I actually have no idea, correct me if I am wrong) calling Recv() twice
will slow the program down.
为了获得最佳效率和稳定性,构建数据包/接收系统的最佳方法是什么?其他应用程序是如何做到的?你有什么建议吗?
先感谢您。