因此,我尝试在我的 FreeBSD 服务器上将 boost.log 与 syslog sink 一起使用,该服务器运行 rsyslogd 并在文件套接字上侦听 UDP 数据。显然这适用于 FreeBSD 领域。实际上,文件套接字是一个 dgram 套接字(telnet 到文件套接字是在 FreeBSD 中工作的另一件事):
$ telnet /var/run/log
Trying /var/run/log...
/var/run/log: Protocol wrong type for socket
无论如何,boost.log 不会与文件套接字通信,只会与 IP 地址通信。我的计划是在我的应用程序中继到文件套接字的常规基于 IP 的 UDP 服务器之间代理信息。从理论上讲,这应该可以正常工作。
但是,我找不到任何方法让 ASIO 通过 UDP 与文件套接字甚至文件套接字进行通信。我知道可能有使用 ASIO 处理文件 I/O 的方法,但这似乎是一个很难的谷歌搜索 - 没有相关的东西出现。充其量只有少数东西(在这个站点上)必须处理 Windows 文件 I/O 和 ASIO。
理想情况下,我会寻找这样的东西(虽然这根本不存在):
socket.send_to(boost::asio::buffer(data, length),
boost::asio::ip::udp::endpoint(boost::asio::ip::file_address("/var/run/log"), port);
但我会接受任何可行的方法。