diff --git a/src/network_engine.cpp b/src/network_engine.cpp
index 93a6cf88b0ab39762bddba1003daabdde22b21ed..4d5602819dce8721bb77829358552406426fdd1c 100644
--- a/src/network_engine.cpp
+++ b/src/network_engine.cpp
@@ -218,7 +218,8 @@ NetworkEngine::requestStep(Sp<Request> sreq)
             node.getAddr());
     if (err == ENETUNREACH  ||
         err == EHOSTUNREACH ||
-        err == EAFNOSUPPORT)
+        err == EAFNOSUPPORT ||
+        err == EPIPE)
     {
         node.setExpired();
         if (not node.id)
@@ -582,6 +583,9 @@ NetworkEngine::send(const char *buf, size_t len, int flags, const SockAddr& addr
 
     if (s < 0)
         return EAFNOSUPPORT;
+#ifdef MSG_NOSIGNAL
+    flags &= MSG_NOSIGNAL;
+#endif
     if (sendto(s, buf, len, flags, addr.get(), addr.getLength()) == -1) {
         int err = errno;
         DHT_LOG.e("Can't send message to %s: %s", addr.toString().c_str(), strerror(err));