diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index 5753dacb07b834c01e074e78e79617f6272949cd..2207e0d1a6a3305774bdae546edea6a36a0b5248 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -524,6 +524,9 @@ TlsSession::sendRaw(const void* buf, size_t size)
         stTxRawBytesCnt_ += size;
         return ret;
     }
+
+    // Must be called to pass errno value to GnuTLS on Windows (cf. GnuTLS doc)
+    gnutls_transport_set_errno(session_, errno);
     return -1;
 }
 
@@ -1113,6 +1116,8 @@ DhParams::generate()
 uint16_t
 TlsSession::getMtu()
 {
+    if (state_ == TlsSessionState::SHUTDOWN)
+        throw std::runtime_error("Getting MTU from dead TLS session.");
     return gnutls_dtls_get_mtu(session_);
 }