diff options
author | Jim Meyering <meyering@redhat.com> | 2009-08-20 12:29:46 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-08-20 15:59:53 +0200 |
commit | d1c35f871022e40f9abd93048c1115c6565f94cb (patch) | |
tree | fc408da49d2690ede7c15bd6b9db0f67f56e4db4 /daemon/proto.c | |
parent | 0c92c583d5291e1a3a966b36f107bf48e4bfad93 (diff) | |
download | libguestfs-d1c35f871022e40f9abd93048c1115c6565f94cb.tar.gz libguestfs-d1c35f871022e40f9abd93048c1115c6565f94cb.tar.xz libguestfs-d1c35f871022e40f9abd93048c1115c6565f94cb.zip |
daemon: diagnose socket write failure
* daemon/proto.c (send_chunk): Don't ignore socket-write error.
* daemon/proto.c (send_file_end): Return "int", not void,
so we can propagate send_chunk failure to caller.
* daemon/daemon.h (send_file_end): Update prototype.
* daemon/tar.c (do_tar_out, do_tgz_out): Update uses of send_file_end.
* daemon/upload.c (do_download): Likewise.
Diffstat (limited to 'daemon/proto.c')
-rw-r--r-- | daemon/proto.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/daemon/proto.c b/daemon/proto.c index 9b33902f..d935ded5 100644 --- a/daemon/proto.c +++ b/daemon/proto.c @@ -462,7 +462,7 @@ check_for_library_cancellation (void) return 1; } -void +int send_file_end (int cancel) { guestfs_chunk chunk; @@ -470,7 +470,7 @@ send_file_end (int cancel) chunk.cancel = cancel; chunk.data.data_len = 0; chunk.data.data_val = NULL; - send_chunk (&chunk); + return send_chunk (&chunk); } static int @@ -495,8 +495,12 @@ send_chunk (const guestfs_chunk *chunk) xdr_uint32_t (&xdr, &len); xdr_destroy (&xdr); - (void) xwrite (sock, lenbuf, 4); - (void) xwrite (sock, buf, len); + int err = (xwrite (sock, lenbuf, 4) == 0 + && xwrite (sock, buf, len) == 0 ? 0 : -1); + if (err) { + fprintf (stderr, "send_chunk: write failed\n"); + exit (1); + } - return 0; + return err; } |