diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index e1faa6e2498c391305858d09eed7e09c1712fd70..90e995695063e0becacf085c240330112e4c6dc4 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -622,6 +622,11 @@ TlsSession::TlsSessionImpl::recvRaw(void* buf, size_t size)
         return -1;
     }
 
+    if (rxQueue_.empty()) {
+        gnutls_transport_set_errno(session_, EAGAIN);
+        return -1;
+    }
+
     const auto& pkt = rxQueue_.front();
     const std::size_t count = std::min(pkt.size(), size);
     std::copy_n(pkt.begin(), count, reinterpret_cast<ValueType*>(buf));