【发布时间】:2013-03-08 04:50:57
【问题描述】:
我正在编写一个网关服务,它监听网络套接字并将接收到的数据包路由到单独的守护进程。我打算使用 boost asio,但我遇到了几个问题。下面是我打算实现的服务器的设计:
网关将使用 boost asio 监听 TCP 连接。
网关还将使用 boost asio 侦听来自守护程序的流式 Unix 域连接。
只要 tcp 连接上有数据包,网关就会查看数据包中的协议标记,并将数据包放在服务将侦听的 unix 域连接上。
只要服务连接上有数据包,网关就会查看客户端标签并建立相应的客户端连接。
网关中的每个描述符都是非阻塞的。
我遇到了一个特殊问题,当网关写入服务连接时,如果服务套接字已满,则有可能出现 EAGAIN 或 EWOULDBLOCK 错误。我计划通过排队缓冲区和“等待服务连接准备好写入”来解决这个问题。
如果我使用 select 系统调用“等待服务连接准备好写入”将转换为在 writefd 列表中添加 fd 并将其传递给 select。一旦服务连接准备好写入,我会将排队的缓冲区写入连接,并将从 select 的 writefdlist 中删除服务连接。
我如何使用 boost asio 做同样的事情?这样的事情可能吗?
【问题讨论】:
标签: sockets network-programming boost-asio