-->

Boost Asio type to use for both unix-socket and tc

2020-06-06 01:35发布

问题:

We have a boost asio based networking code, which connects to a remote side. The local side could be either a tcp4 socket or a unix socket.

Is there a typename to use that could hold both of these type of boost sockets? (e.g. something like a base class for both?). Currently our code use boost::asio::generic::stream_protocol::socket for tcp socket, and boost::asio::local::stream_protocol::socket for a unix socket.

回答1:

Actually, there's a dedicated ip::tcp::socket type for tcp sockets. As for generic::stream_protocol::socket, it is the universal stream socket type that accepts socket protocol and family in run-time, so you can use it for the both types you need:

generic::stream_protocol::socket ipc(io_, generic::stream_protocol(AF_UNIX, 0));
generic::stream_protocol::socket tcp(io_, generic::stream_protocol(AF_INET, IPPROTO_TCP));