libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 1d3131799b6783bce885a9290afa23996103a4f2
parent de5c159df5d4395c6c67914c09552321b2012123
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Sun, 20 Aug 2017 18:43:17 +0300

*_param_adapter: Distinguish between network error and remote hard close

Diffstat:
Msrc/microhttpd/connection.c | 8++++++--
Msrc/microhttpd/connection.h | 5+++--
Msrc/microhttpd/connection_https.c | 4++--
3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -152,8 +152,10 @@ recv_param_adapter (struct MHD_Connection *connection, } if (MHD_SCKT_ERR_IS_EINTR_ (err)) return MHD_ERR_AGAIN_; + if (MHD_SCKT_ERR_IS_ (err, MHD_SCKT_ECONNRESET_)) + return MHD_ERR_CONNRESET_; /* Treat any other error as hard error. */ - return MHD_ERR_CONNRESET_; + return MHD_ERR_NOTCONN_; } #ifdef EPOLL_SUPPORT else if (i > (size_t)ret) @@ -204,8 +206,10 @@ send_param_adapter (struct MHD_Connection *connection, } if (MHD_SCKT_ERR_IS_EINTR_ (err)) return MHD_ERR_AGAIN_; + if (MHD_SCKT_ERR_IS_ (err, MHD_SCKT_ECONNRESET_)) + return MHD_ERR_CONNRESET_; /* Treat any other error as hard error. */ - return MHD_ERR_CONNRESET_; + return MHD_ERR_NOTCONN_; } #ifdef EPOLL_SUPPORT else if (i > (size_t)ret) diff --git a/src/microhttpd/connection.h b/src/microhttpd/connection.h @@ -36,12 +36,13 @@ #define MHD_ERR_AGAIN_ (-3073) /** - * "Connection (remote) reset" error code + * Connection was hard-closed by remote peer. */ #define MHD_ERR_CONNRESET_ (-3074) /** - * "Not connected" error code + * Connection is not connected anymore due to + * network error or any other reason. */ #define MHD_ERR_NOTCONN_ (-3075) diff --git a/src/microhttpd/connection_https.c b/src/microhttpd/connection_https.c @@ -73,7 +73,7 @@ recv_tls_adapter (struct MHD_Connection *connection, /* Likely 'GNUTLS_E_INVALID_SESSION' (client communication disrupted); interpret as a hard error */ connection->tls_read_ready = false; - return MHD_ERR_CONNRESET_; + return MHD_ERR_NOTCONN_; } #ifdef EPOLL_SUPPORT @@ -125,7 +125,7 @@ send_tls_adapter (struct MHD_Connection *connection, { /* Likely 'GNUTLS_E_INVALID_SESSION' (client communication disrupted); interpret as a hard error */ - return MHD_ERR_CONNRESET_; + return MHD_ERR_NOTCONN_; } #ifdef EPOLL_SUPPORT /* If NOT all available data was sent - socket is not write ready anymore. */