From bcb8bcb80f36599431d0d406926493aa311c6d51 Mon Sep 17 00:00:00 2001 From: Jonathan Dieter Date: Sat, 18 Jan 2020 21:21:53 +0000 Subject: [PATCH] Handle write errors correctly Signed-off-by: Jonathan Dieter --- src/lib/io.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lib/io.c b/src/lib/io.c index c81317c..5925d51 100644 --- a/src/lib/io.c +++ b/src/lib/io.c @@ -62,11 +62,19 @@ int write_data(zckCtx *zck, int fd, const char *data, size_t length) { } ssize_t write_bytes = write(fd, data, length); if(write_bytes == -1) { - set_error(zck, "Error write data: %s", strerror(errno)); - return false; - } else if(write_bytes != length) { - set_fatal_error(zck, "Short write"); + set_fatal_error(zck, "Error writing data: %s", strerror(errno)); return false; + } else if(write_bytes < length) { + // According to man page, if write is less than full amount, we should try again + length -= write_bytes; + write_bytes = write(fd, data+write_bytes, length); + if(write_bytes == -1) { + set_fatal_error(zck, "Error writing data: %s", strerror(errno)); + return false; + } else if(write_bytes < length) { + set_fatal_error(zck, "Short write (after two attempts)"); + return false; + } } return true; } -- 2.30.2