diff --git a/zmq_src/ZMQServer.cpp b/zmq_src/ZMQServer.cpp
index 6044734b9cd65763d0ad964d6bed7fbcf466c632..44983891693c3448366562328e51bc9ec84968ad 100644
--- a/zmq_src/ZMQServer.cpp
+++ b/zmq_src/ZMQServer.cpp
@@ -211,25 +211,27 @@ pair <string, shared_ptr<zmq::message_t>> ZMQServer::receiveMessage() {
 
     if (!socket->recv(identity.get())) {
         checkForExit();
-        // something terrible happened
-        spdlog::error("Fatal error: socket->recv(&identity) returned false. Exiting.");
-        exit(-11);
+        // bad socket type
+        spdlog::error("Error: socket->recv(&identity) returned false.");
+        throw SGXException(ZMQ_SERVER_ERROR, "Error: socket->recv(&identity) returned false.");
     }
 
     if (!identity->more()) {
         checkForExit();
-        // something terrible happened
-        spdlog::error("Fatal error: zmq_msg_more(identity) returned false. Exiting.");
-        exit(-12);
+        // bad socket type
+        spdlog::error("Error: zmq_msg_more(identity) returned false.");
+        throw SGXException(ZMQ_SERVER_ERROR, "Error: zmq_msg_more(identity) returned false.");
     }
+    auto id = string((char *) identity->data(), identity->size());
+    spdlog::debug("Received identity via ZMQ server: {}", id);
 
     auto reqMsg = make_shared<zmq::message_t>();
 
     if (!socket->recv(reqMsg.get(), 0)) {
         checkForExit();
-        // something terrible happened
-        spdlog::error("Fatal error: socket.recv(&reqMsg, 0) returned false. Exiting");
-        exit(-13);
+        // bad socket type
+        spdlog::error("Error: socket.recv(&reqMsg, 0) returned false.");
+        throw SGXException(ZMQ_SERVER_ERROR, "Error: socket.recv(&reqMsg, 0) returned false.");
     }
 
     auto result = string((char *) reqMsg->data(), reqMsg->size());