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

Using UNIX sockets, how to wait for data while being able to send data?

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


您有很多选择。 至少四个:

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

最简单的就是您所知道的:)。 因此对我来说,asio会是噩梦,而epoll将会是小菜一碟。 你的旅费可能会改变。

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