使用UNIX套接字,如何在能够发送数据的同时等待数据?

Ale*_*ans 3 c++ sockets

我有一个使用UNIX套接字的C++服务器,它目前阻止来自单个客户端的read()调用.我希望能够扩展服务器,以便我可以将一些数据写入套接字,同时仍然能够从套接字读取?像Boost.Thread这样的线程库是实现这一目标的最佳方法,还是有其他方法可以更容易/更有效?

cni*_*tar 8

你有很多选择.至少四个:

  • 使用select(/ poll/epoll/kqueue)
  • 使用单独的线程进行读/写(pthreads/Boost.Thread)
  • 使用asio
  • 使用异步IO(例如libaio)

最简单的是你知道的:).所以对我来说asio会是噩梦般的,而且epoll会是小蛋糕.你的旅费可能会改变.

至于效率,很难击败特定于实现的替代品select.