diff -ru c-rest-engine-1.1/transport/posix/defines.h c-rest-engine-1.1-modified/transport/posix/defines.h --- c-rest-engine-1.1/transport/posix/defines.h 2017-10-31 11:20:36.000000000 -0700 +++ c-rest-engine-1.1-modified/transport/posix/defines.h 2017-11-10 15:56:01.170279430 -0800 @@ -50,6 +50,7 @@ /**** Transport internal error codes ****/ #define VM_SOCK_POSIX_ERROR_SYS_CALL_FAILED 5100 +#define VM_SOCK_POSIX_ERROR_BROKEN_PIPE 5101 #define MAX_RETRY_ATTEMPTS 50000 diff -ru c-rest-engine-1.1/transport/posix/socket.c c-rest-engine-1.1-modified/transport/posix/socket.c --- c-rest-engine-1.1/transport/posix/socket.c 2017-10-31 11:20:36.000000000 -0700 +++ c-rest-engine-1.1-modified/transport/posix/socket.c 2017-11-10 15:55:25.410277664 -0800 @@ -879,10 +879,16 @@ { dwError = REST_ENGINE_SUCCESS; } - else + else if (nRead < 0) { + VMREST_LOG_ERROR(pRESTHandle, "Socket read failed with error code %u", errorCode); dwError = errorCode; } + else if (nRead == 0) + { + VMREST_LOG_ERROR(pRESTHandle,"%s", "Socket read failed due to broken pipe"); + dwError = VM_SOCK_POSIX_ERROR_BROKEN_PIPE; + } BAIL_ON_VMREST_ERROR(dwError); if (nPrevBuf >= pRESTHandle->pRESTConfig->maxDataPerConnMB) @@ -980,7 +986,7 @@ nWritten = write(pSocket->fd, (pszBuffer + nWrittenTotal) ,nRemaining); errorCode = errno; } - if (nWritten >= 0) + if (nWritten > 0) { nWrittenTotal += nWritten; nRemaining -= nWritten; @@ -1017,6 +1023,12 @@ BAIL_ON_VMREST_ERROR(dwError); } } + else + { + dwError = VM_SOCK_POSIX_ERROR_SYS_CALL_FAILED; + VMREST_LOG_ERROR(pRESTHandle,"Socket write failed with error code %u, dwError %u, nWritten %d", errorCode, dwError, nWritten); + BAIL_ON_VMREST_ERROR(dwError); + } } } VMREST_LOG_DEBUG(pRESTHandle,"\nWrite Status on Socket with fd = %d\nRequested: %d nBufLen\nWritten %d bytes\n", pSocket->fd, nBufLen, nWrittenTotal);