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

C++ c+中套接字连接的缓冲区大小+;,c++,sockets,pop3,C++,Sockets,Pop3,我试图用C/++构建一个基本的POP3邮件客户端,但遇到了一点问题。既然在构建程序时必须定义缓冲区大小,但是消息可以任意大,那么如何让邮件服务器将其分部分发送给您呢?如果这不是解决问题的正确方法,那是什么 当我在这里的时候,有人能为我确认RFC2822仍然是当前定义电子邮件布局的文档吗 谢谢如果您正在从套接字读取,可以指定要读取的字节数。此外,您还可以在运行时使用new动态分配缓冲区,因为大多数电子邮件都是使用TCP/IP完成的,如果您确实愿意,您可以一次读取一个字节。底层实现将为您缓冲流。它在

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

当我在这里的时候,有人能为我确认RFC2822仍然是当前定义电子邮件布局的文档吗


谢谢

如果您正在从套接字读取,可以指定要读取的字节数。此外,您还可以在运行时使用
new

动态分配缓冲区,因为大多数电子邮件都是使用TCP/IP完成的,如果您确实愿意,您可以一次读取一个字节。底层实现将为您缓冲流。它在离开网络时一次接收大约1400字节。通常,我使用
std::vector
std::string
作为缓冲区,一次读取一个字节,然后在一个
select()
循环中以一个短超时将
推回到缓冲区

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

至于哪一个标准是最新的,他说它已经被淘汰了。我通常检查
http://tools.ietf.org/html/rfcXXXX
其中
XXXX
是RFC编号。如果它已过时,则在顶部有一个指向最合适RFC的链接


最后一点,如果没有充分的理由,也不要构建用于部署的POP客户端。在各种各样的RFC中埋着很多gotcha。这是一次非常好的学习体验。

定义缓冲区大小是什么意思?你是说套接字缓冲区,邮件缓冲区,还有其他未定义的缓冲区。谢谢你,这太棒了。我根本没有使用客户机的真正计划,我只是想了解如何工作。我发现现在,随着gmail等流行软件的自由放任实施,即使是专业构建的客户端也会崩溃,所以我不会尽可能地信任我的客户端。