diff --git a/components/net/cpp/include/ftl/net/peer.hpp b/components/net/cpp/include/ftl/net/peer.hpp
index 0535fc22d2fcac5ef558605e67aedc00cf26787c..e1ef7b5d59c89c1b7f78239c185d1effbcee1fbe 100644
--- a/components/net/cpp/include/ftl/net/peer.hpp
+++ b/components/net/cpp/include/ftl/net/peer.hpp
@@ -205,7 +205,7 @@ class Peer {
 	
 	protected:
 	void data();			// Process one message from socket
-	void socketError();		// Process one error from socket
+	bool socketError();		// Process one error from socket
 	void error(int e);
 	
 	bool _data();
diff --git a/components/net/cpp/src/peer.cpp b/components/net/cpp/src/peer.cpp
index 57fdab3a9540f01ee32bdb0ebc016dd6ffb5e53d..8e3e73151f80bb3bee610f0beb99aa11757cb596 100644
--- a/components/net/cpp/src/peer.cpp
+++ b/components/net/cpp/src/peer.cpp
@@ -401,7 +401,7 @@ void Peer::_badClose(bool retry) {
 	}
 }
 
-void Peer::socketError() {
+bool Peer::socketError() {
 	int err;
 #ifdef WIN32
 	int optlen = sizeof(err);
@@ -410,11 +410,14 @@ void Peer::socketError() {
 #endif
 	getsockopt(sock_, SOL_SOCKET, SO_ERROR, (char*)&err, &optlen);
 
+	if (err == 0) return false;
+
 	// Must close before log since log may try to send over net causing
 	// more socket errors...
 	_badClose();
 
-	if (err != 0) LOG(ERROR) << "Socket: " << uri_ << " - error " << err;
+	LOG(ERROR) << "Socket: " << uri_ << " - error " << err;
+	return true;
 }
 
 void Peer::error(int e) {
diff --git a/components/net/cpp/src/universe.cpp b/components/net/cpp/src/universe.cpp
index 809bba4af8f1ec7becf35f93904b2d52e5ac14e8..d72efceba5f7f7edd53167073aab47dba4a62a34 100644
--- a/components/net/cpp/src/universe.cpp
+++ b/components/net/cpp/src/universe.cpp
@@ -445,9 +445,10 @@ void Universe::_run() {
 					if (sock == INVALID_SOCKET) continue;
 
 					if (FD_ISSET(sock, &impl_->sfderror_)) {
-						s->socketError();
-						s->close();
-						continue;  // No point in reading data...
+						if (s->socketError()) {
+							s->close();
+							continue;  // No point in reading data...
+						}
 					}
 					//If message received from this client then deal with it
 					if (FD_ISSET(sock, &impl_->sfdread_)) {