【发布时间】:2017-09-07 06:26:38
【问题描述】:
Asio 有代码可以忽略 Signal_init.hpp 中的 SIGPIPE,但是在 io_service.hpp 中有一个宏扭曲它:
#elif defined(__sun) || defined(__QNX__) || defined(__hpux) || defined(_AIX) \
|| defined(__osf__)
我在 Ubuntu 中编译发现宏没有启用,所以 std::signal(Signal, SIG_IGN); 没有被调用。
但是,当我通过 asio 写入关闭的套接字时,它可以通过完整处理程序中的 boost::system::error_code 报告 EPIPE 错误。根据libc doc:
在这种情况下,send 先生成一个 SIGPIPE 信号;如果那个信号是 忽略或阻止,或者如果其处理程序返回,则发送失败 外延。
asio 如何用SIGPIPE 设置让进程忽略它? asio 在这方面有什么特别之处吗?
【问题讨论】:
标签: c++ boost-asio