From 74ebc09736f85fb72a5bcdc96b93ae50cf86652d Mon Sep 17 00:00:00 2001 From: Test_User Date: Mon, 22 Jul 2024 23:11:54 -0400 Subject: Bit of improvement on error handling for networking --- networks/openssl.c | 14 ++++++++++++++ networks/openssl_buffered.c | 14 ++++++++++++++ networks/plaintext.c | 2 ++ networks/plaintext_buffered.c | 2 ++ 4 files changed, 32 insertions(+) (limited to 'networks') diff --git a/networks/openssl.c b/networks/openssl.c index bf6b869..d2b84b1 100644 --- a/networks/openssl.c +++ b/networks/openssl.c @@ -148,6 +148,20 @@ size_t openssl_recv(void *handle, char *data, size_t len, char *err) { case SSL_ERROR_WANT_WRITE: pollfd.events = POLLOUT; break; + case SSL_ERROR_ZERO_RETURN: + mutex_unlock(&(openssl_handle->mutex)); + *err = 2; + return 0; + case SSL_ERROR_SYSCALL: + mutex_unlock(&(openssl_handle->mutex)); + + if (errno == ESHUTDOWN || errno == ECONNRESET) { + *err = 2; + } else { + *err = 3; + } + + return 0; default: mutex_unlock(&(openssl_handle->mutex)); *err = 3; diff --git a/networks/openssl_buffered.c b/networks/openssl_buffered.c index 78d2830..47057aa 100644 --- a/networks/openssl_buffered.c +++ b/networks/openssl_buffered.c @@ -265,6 +265,20 @@ size_t openssl_buffered_recv(void *handle, char *data, size_t len, char *err) { case SSL_ERROR_WANT_WRITE: pollfd.events = POLLOUT; break; + case SSL_ERROR_ZERO_RETURN: + mutex_unlock(&(openssl_handle->mutex)); + *err = 2; + return 0; + case SSL_ERROR_SYSCALL: + mutex_unlock(&(openssl_handle->mutex)); + + if (errno == ESHUTDOWN || errno == ECONNRESET) { + *err = 2; + } else { + *err = 3; + } + + return 0; default: mutex_unlock(&(openssl_handle->mutex)); *err = 3; diff --git a/networks/plaintext.c b/networks/plaintext.c index 56c06fb..0bc17a6 100644 --- a/networks/plaintext.c +++ b/networks/plaintext.c @@ -72,6 +72,8 @@ size_t plaintext_recv(void *fd, char *data, size_t len, char *err) { if (res == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK) { *err = 1; + } else if (errno == ESHUTDOWN || errno == ECONNRESET) { + *err = 2; } else { *err = 3; } diff --git a/networks/plaintext_buffered.c b/networks/plaintext_buffered.c index d8cfc77..5fea3bd 100644 --- a/networks/plaintext_buffered.c +++ b/networks/plaintext_buffered.c @@ -205,6 +205,8 @@ size_t plaintext_buffered_recv(void *handle, char *data, size_t len, char *err) if (res == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK) { *err = 1; + } else if (errno == ESHUTDOWN || errno == ECONNRESET) { + *err = 2; } else { *err = 3; } -- cgit v1.2.3