c ++中套接字连接的缓冲区大小

时间:2010-05-10 22:57:32

标签: c++ sockets pop3

我正在尝试用C / ++构建一个基本的POP3邮件客户端,但我遇到了一些问题。由于您在构建程序时必须定义缓冲区大小,但是消息可以任意大,您如何让邮件服务器将其部分发送给您?如果这不是解决问题的正确方法,那是什么?

虽然我在这里,但有人可以向我确认RFC 2822仍然是定义电子邮件布局的当前文档吗?

由于

2 个答案:

答案 0 :(得分:3)

由于大多数电子邮件是使用TCP / IP完成的,因此如果您真的想要,您可以一次读取一个字节。底层实现将为您缓冲流。一次离网络接收大约1,400个字节。通常,我使用std::vector<char>std::string作为缓冲区,一次读取一个字节,并push_backselect()循环中使用短暂超时读取缓冲区。< / p>

我不记得POP是否包含最大行长度。如果是,则可以将其用作缓冲区大小,并在向量上调用reserve()。这将最大限度地减少可能发生的内存重新分配和副本。

至于哪个标准是最新的,http://tools.ietf.org/html/rfc2822表示它已被http://tools.ietf.org/html/rfc5322废弃。我经常检查http://tools.ietf.org/html/rfcXXXX,其中XXXX是RFC编号。如果它已经过时,那么顶部有一个最合适的RFC链接。

最后一点,不要在没有充分理由的情况下构建用于部署的POP客户端。在各种RFC中埋藏了许多陷阱。不过,这是一次非常好的学习经历。

答案 1 :(得分:0)

如果您正在读取套接字,则可以指定希望read的字节数。此外,您可以使用new在运行时动态分配缓冲区。