मैं जीएनयू/लिनक्स पर दो प्रक्रियाओं के बीच संवाद करने के लिए एक पाइप का उपयोग कर रहा हूं। प्राप्त करने वाला अंत पाइप बंद कर देता है जबकि प्रेषण अंत अभी भी डेटा भेजने की कोशिश कर रहा है। यहां कुछ कोड है जो स्थिति को अनुकरण करता है।बूस्ट :: एएसओओ का उपयोग करते समय मैं सिगिपिप को कैसे रोकूं?
#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;
}
जब मैं इसे चलाता हूं तो मुझे एक सिगिप मिलता है; क्लासिक स्थिति, मुझे पता है। हालांकि, मुझे लगता है कि boost::asio::error::basic_errors
में broken_pipe
मान है। मैं उम्मीद करता हूं कि सिग्नल उठाए बिना त्रुटि_code में वापस लौटाया जाएगा।
क्या यह मेरी प्रक्रिया के लिए सिगिप हैंडलर बनाने के बिना किया जा सकता है? उदाहरण के लिए, क्या :: Iio को बढ़ावा देने के लिए एक कॉन्फ़िगरेशन विकल्प है जो मुझे याद आ रही है? हो सकता है कि कुछ ऐसा जो कार्यान्वयन में MSG_NOSIGNAL को सक्षम करेगा?
+1 प्रतिलिपि प्रस्तुत –