diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 80fb1b938f9e7622ca0e99c71f4c890eccf9312a..f2fa098270616f0dffc6cbdedbc814c05a38cb16 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -858,8 +858,10 @@ extern char *node_state_string_compact(enum node_states inx);
 		char *ptr = (char *) buf;				\
 		int rc;							\
 		while (remaining > 0) {					\
-                        rc = read(fd, ptr, remaining);			\
-                        if (rc == 0) {					\
+			rc = read(fd, ptr, remaining);			\
+			if ((rc == 0) && (remaining == size))		\
+				goto rwfail;				\
+			else if (rc == 0) {				\
 				debug("%s:%d: %s: safe_read (%d of %d) EOF", \
 				      __FILE__, __LINE__, __CURRENT_FUNC__, \
 				      remaining, (int)size);		\