diff --git a/src/socket.c b/src/socket.c index 4e53ee2b5..c9f9cae04 100644 --- a/src/socket.c +++ b/src/socket.c @@ -391,15 +391,27 @@ static int connSocketBlockingConnect(connection *conn, const char *addr, int por */ static ssize_t connSocketSyncWrite(connection *conn, char *ptr, ssize_t size, long long timeout) { - return syncWrite(conn->fd, ptr, size, timeout); + ssize_t ret = syncWrite(conn->fd, ptr, size, timeout); + if (ret == -1) { + conn->last_errno = errno; + } + return ret; } static ssize_t connSocketSyncRead(connection *conn, char *ptr, ssize_t size, long long timeout) { - return syncRead(conn->fd, ptr, size, timeout); + ssize_t ret = syncRead(conn->fd, ptr, size, timeout); + if (ret == -1) { + conn->last_errno = errno; + } + return ret; } static ssize_t connSocketSyncReadLine(connection *conn, char *ptr, ssize_t size, long long timeout) { - return syncReadLine(conn->fd, ptr, size, timeout); + ssize_t ret = syncReadLine(conn->fd, ptr, size, timeout); + if (ret == -1) { + conn->last_errno = errno; + } + return ret; } static int connSocketGetType(void) { diff --git a/src/syncio.c b/src/syncio.c index 63e9444ff..b5958a0be 100644 --- a/src/syncio.c +++ b/src/syncio.c @@ -94,7 +94,10 @@ ssize_t syncRead(int fd, char *ptr, ssize_t size, long long timeout) { /* Optimistically try to read before checking if the file descriptor * is actually readable. At worst we get EAGAIN. */ nread = read(fd, ptr, size); - if (nread == 0) return -1; /* short read. */ + if (nread == 0) { + errno = ECONNRESET; + return -1; + } if (nread == -1) { if (errno != EAGAIN) return -1; } else { diff --git a/src/tls.c b/src/tls.c index ddadb6cf7..53c194aed 100644 --- a/src/tls.c +++ b/src/tls.c @@ -1775,6 +1775,9 @@ static ssize_t connTLSSyncWrite(connection *conn_, char *ptr, ssize_t size, long unsetBlockingTimeout(conn); } + if (ret < 0) { + conn->c.last_errno = errno; + } return ret; } @@ -1790,6 +1793,9 @@ static ssize_t connTLSSyncRead(connection *conn_, char *ptr, ssize_t size, long unsetBlockingTimeout(conn); } + if (ret < 0) { + conn->c.last_errno = errno; + } return ret; } @@ -1827,6 +1833,9 @@ exit: if (!blocking) { unsetBlockingTimeout(conn); } + if (nread < 0) { + conn->c.last_errno = errno; + } return nread; }