Ran into this problem a few weeks ago, not sure if my solution is the best. Anyway, have an x-platform app that on OSX is bringing in their dispatcher and such. The application is using Poco::ServerApplication. After the bits that bring in using the CFRunLoop et al were added, we started seeing sporadic death by broken pipe. Looked into it further, and turns out it's the way the signal handling is being done by Poco. So the main thread blocks SIGPIPE, all Poco::Threads block SIGPIPE, but I couldn't find a way to tell the CFRunLoop threads to block SIGPIPE as well. So what I ended up doing as a hack was changing SignalHandler::install to add a sigaction for SIGPIPE. Then in handleSignal, I just ignore it. Is there a better way to do this?