Поскольку большая часть электронной почты выполняется с использованием TCP / IP, вы можете читать по одному байту за раз, если вы действительно этого хотите. Базовая реализация буферизует поток для вас. Получается примерно 1400 байт за раз вне сети. Обычно я использую std::vector<char>
или std::string
в качестве буфера и считываю по одному байту за раз и push_back
в буфер в цикле select()
с коротким тайм-аутом.
Я не могу вспомнить, включает ли 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 похоронено много гочей. Это действительно хороший опыт обучения.