我正在使用管道在Gnu/Linux上的两个进程之间进行通信。当发送端仍在尝试发送数据时,接收端关闭管道。以下是一些模拟情况的代码。如何在使用boost :: asio时防止SIGPIPE?
#include <unistd.h>
#include <boost/asio.hpp>
int main()
{
int pipe_fds[2];
if(::pipe(pipe_fds) != 0) return 1;
// close the receiving end
::close(pipe_fds[0]);
boost::asio::io_service io;
boost::asio::posix::stream_descriptor sd(io, pipe_fds[1]);
boost::system::error_code ec;
sd.write_some(boost::asio::buffer("blah"), ec);
return 0;
}
当我运行它时,我得到一个SIGPIPE;经典的情况,我知道。但是,我看到boost::asio::error::basic_errors
的值为broken_pipe
。我希望能够在error_code中返回而不会引发信号。
可这没有创造我的过程中SIGPIPE处理程序来完成?例如,有没有一个配置选项来提升:: asio,我失踪了?也许会在实现中启用MSG_NOSIGNAL的东西?
+1的再生 –