同步读取多个TCP响应

Synchronous reading of multiple TCP responses

我正在编写一个简单的 POP3 客户端。例如,当我向 POP3 服务器发出 LIST 请求时,它会响应可用消息的索引和大小(字节)。它看起来像这样:

+OK 3 messages\r\n
1 103\r\n
2 140\r\n
3 184\r\n

我使用 boost::asio::read_until\r\n 作为分隔符,但这样我就无法保持同步,因为有时只读取第一部分,例如+OK 3 messages\r\n1 103\r\n 这就是乐观的情况。我希望我的程序等待消息的最后一部分。我想出的唯一解决方案是在发出请求之后和阅读之前放置 sleep() ,但这似乎不是可靠也不方便的解决方案。 有什么更好的处理方法?

根据 POP3 specification 的秘密是等待一个合适的定界符,即 .\r\n

致谢:@RemyLebeau