diff --git a/include/opendht/network_engine.h b/include/opendht/network_engine.h
index 4c6a3865e60d4eeaf4bfd567527b4bd1bacdad50..b99a80ccfd24d854ba9727f2bf40d00bcde77d6e 100644
--- a/include/opendht/network_engine.h
+++ b/include/opendht/network_engine.h
@@ -505,7 +505,7 @@ private:
 
 
     // basic wrapper for socket sendto function
-    int send(const char *buf, size_t len, int flags, const SockAddr& addr);
+    void send(const char *buf, size_t len, int flags, const SockAddr& addr);
 
     void sendValueParts(TransId tid, const std::vector<Blob>& svals, const SockAddr& addr);
     std::vector<Blob> packValueHeader(msgpack::sbuffer&, const std::vector<Sp<Value>>&);
diff --git a/src/network_engine.cpp b/src/network_engine.cpp
index ed168e018a1b270e14a05d1dfb1bf8e78dba7f38..6b1c98228f663bb5d90edabdc14301319db7bd34 100644
--- a/src/network_engine.cpp
+++ b/src/network_engine.cpp
@@ -605,11 +605,11 @@ insertAddr(msgpack::packer<msgpack::sbuffer>& pk, const SockAddr& addr)
     pk.pack_bin_body((char*)addr_ptr, addr_len);
 }
 
-int
+void
 NetworkEngine::send(const char *buf, size_t len, int flags, const SockAddr& addr)
 {
     if (addr.second == 0)
-        return -1;
+        return;
 
     int s;
     if (addr.getFamily() == AF_INET)
@@ -620,8 +620,9 @@ NetworkEngine::send(const char *buf, size_t len, int flags, const SockAddr& addr
         s = -1;
 
     if (s < 0)
-        return -1;
-    return sendto(s, buf, len, flags, (const sockaddr*)&addr.first, addr.second);
+        return;
+    if (sendto(s, buf, len, flags, (const sockaddr*)&addr.first, addr.second) == -1)
+        DHT_LOG.e("Can't send message to %s: %s", addr.toString().c_str(), strerror(errno));
 }
 
 Sp<Request>