aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorMORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>2013-07-23 17:30:12 +0900
committerKevin Wolf <kwolf@redhat.com>2013-08-06 10:41:56 +0200
commit840042901710c2dc1a3ac3e5af9bed449c339701 (patch)
tree82f2c1a653089c02ff7945b2cca4ba868e1549a5 /util
parent526eda14a68d5b3596be715505289b541288ef2a (diff)
downloadqemu-840042901710c2dc1a3ac3e5af9bed449c339701.zip
qemu-840042901710c2dc1a3ac3e5af9bed449c339701.tar.gz
qemu-840042901710c2dc1a3ac3e5af9bed449c339701.tar.bz2
iov: handle EOF in iov_send_recv
Without this patch, iov_send_recv() never returns when do_send_recv() returns zero. Signed-off-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'util')
-rw-r--r--util/iov.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/util/iov.c b/util/iov.c
index cc6e837..f705586 100644
--- a/util/iov.c
+++ b/util/iov.c
@@ -202,6 +202,12 @@ ssize_t iov_send_recv(int sockfd, struct iovec *iov, unsigned iov_cnt,
return -1;
}
+ if (ret == 0 && !do_send) {
+ /* recv returns 0 when the peer has performed an orderly
+ * shutdown. */
+ break;
+ }
+
/* Prepare for the next iteration */
offset += ret;
total += ret;