UNIX Domain Sockets

Asio提供对UNIX文件域协议的支持(又叫本地套接字),其最基本的使用时创建一对相连接的socket,如下所示:

local::stream_protocol::socket socket1(my_io_service);
local::stream_protocol::socket socket2(my_io_service);
local::connect_pair(socket1, socket2);

这样会创建一对流式的socket。如果想要创建数据包传输的socket,这样用:

local::datagram_protocol::socket socket1(my_io_service);
local::datagram_protocol::socket socket2(my_io_service);
local::connect_pair(socket1, socket2);

UNIX文件域协议通过绑定到本地的端口来创建,很大程度上和TCP很相似:

::unlink("/tmp/foobar"); // Remove previous bingding.
local::stream_protocol::endpoint ep("/tmp/foobar");
local::stream_protocol::acceptor acceptor(my_io_service, ep);
local::stream_protocol::socket socket(my_io_service);
acceptor.accept(socket);

客户端连接到服务器可能会像这样:

local::stream_protocol::endpoint ep("/tmp/foobar");
local::stream_protocol::socket socket(my_io_service);
acceptor.accept(socket);

要想通过UNIX文件域传输文件描述符和证书,这一点在Asio中没有被直接实现,要想使用该功能,需要使用底层的native_handle()成员函数。

参见

local::connect_pair, local::datagram_protocol, local::datagram_protocol::endpoint, local::datagram_protocol::socket, local::stream_protocol, local::stream_protocol::acceptor, local::stream_protocol::endpoint, local::stream_protocol::iostream, local::stream_protocol::socket, UNIX domain sockets examples

注意

UNIX文件域协议的使用需要目标操作系统,否则在编译时就会报错。你可以在程序中使用宏来测试是否能使用。

ASIO_HAS_LOCAL_SOCKETS

results matching ""

    No results matching ""