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