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);