From 38c21730dcc3e83334bf0c719a7b5d63ed6f90e4 Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Sat, 16 Jan 2021 00:28:18 +0100 Subject: Add destructor code for g_sessions in case of shutdown --- receiver.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/receiver.cpp b/receiver.cpp index 6be0f8a..44ab3f7 100644 --- a/receiver.cpp +++ b/receiver.cpp @@ -121,6 +121,9 @@ public: ~Session() { mbedtls_gcm_free(&_ctx); + if (_fd != -1) + ::close(_fd); + _fd = -1; } int ensure_file() { @@ -296,8 +299,10 @@ int main() { socklen_t peer_len = sizeof(peer); ssize_t len = recvfrom(sock, packet, sizeof(packet), MSG_WAITALL, (struct sockaddr *) &peer, &peer_len); - if (len <= 0) + if (len < 0) { errx(-1, "Fatal: recvfrom yields %zd\n", len); + g_sessions.clear(); + } if (len < MIN_PACKET_SIZE) { std::cerr << "Skipping short packet" << std::endl; @@ -312,7 +317,7 @@ int main() { ret = mbedtls_pk_decrypt(&pk, packet + 1 + SESSION_ID_LENGTH, len - 1 - SESSION_ID_LENGTH, rsa_plain_text, &olen, sizeof(rsa_plain_text), mbedtls_ctr_drbg_random, &ctr_drbg); if (ret < 0) { - std::cerr << "Error: Failed to decrypt key (error " << -ret << ") for session " << std::hex << session_id; + std::cerr << "Error: Failed to decrypt key (error " << -ret << ") for session " << std::hex << session_id << std::endl; break; } -- cgit v1.2.3