用于非阻塞,面向行的套接字I / O的C ++库?

时间:2013-01-27 00:14:38

标签: linux sockets select nonblocking epoll

我将编写一个 Linux 客户端,它将与五个(左右)服务器建立套接字连接。客户端将向每个客户端发送一个“行”(字符串后跟“\ n”),并从每个客户端收到一行。

我想在客户端中使用 select() epoll();但是,这是TCP和基于流的,当 select()弹出时,我不能保证在系统缓冲区中有一个完整的“行”。我正在寻找的是一个提供类似于 epoll() sysread()的API的库,但是在整个行的基础上工作

我很惊讶在我的互联网搜索中没有能够找到这样的东西 - 我原以为这是一个相当普遍的需求。 (也许我没有正确地说明这个问题。)写起来似乎并不太难,但我怀疑开源解决方案会更加防弹。

3 个答案:

答案 0 :(得分:2)

看看提升asio。特别是它具有async_read_until功能

  

启动异步操作以将数据读入streambuf直到它   包含分隔符,匹配正则表达式或函数   object表示匹配。

如果您使用的是http,我还建议cpp-netlib支持asynchronous clients

答案 1 :(得分:1)

我的MUSCLE networking library提供此功能(通过PlainTextMessageIOGateway课程);它在我的项目中运行良好,并且它已获得BSD许可,因此如果您愿意,您可以自由使用它。测试子文件夹中包含的portableplaintextclient程序是一个非常简单的(94行)如何使用它的示例。但是,其他受访者认为,自己编写必要的缓冲逻辑并不困难;但是如果你想要一个预先编写/预调试的解决方案,那就是一个。

答案 2 :(得分:-1)

没有这样的事情。每个连接需要一个缓冲区,你需要按照select()/ poll()/ epoll()结果的说明读取它,直到你有一行。这些API并不像你那样关心行终止符。