From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:37663) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REeOD-0000e4-Ax for qemu-devel@nongnu.org; Fri, 14 Oct 2011 05:49:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REeOC-00078Z-Fv for qemu-devel@nongnu.org; Fri, 14 Oct 2011 05:49:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23484) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REeOC-00078L-8H for qemu-devel@nongnu.org; Fri, 14 Oct 2011 05:49:16 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p9E9nFwh025473 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 14 Oct 2011 05:49:15 -0400 Message-ID: <4E980652.60409@redhat.com> Date: Fri, 14 Oct 2011 11:52:18 +0200 From: Kevin Wolf MIME-Version: 1.0 References: <1317799065-29668-1-git-send-email-pbonzini@redhat.com> <1317799065-29668-4-git-send-email-pbonzini@redhat.com> In-Reply-To: <1317799065-29668-4-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 03/15] add qemu_send_full and qemu_recv_full List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org Am 05.10.2011 09:17, schrieb Paolo Bonzini: > Signed-off-by: Paolo Bonzini > --- > osdep.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > qemu-common.h | 4 +++ > 2 files changed, 71 insertions(+), 0 deletions(-) > > diff --git a/osdep.c b/osdep.c > index 56e6963..718a25d 100644 > --- a/osdep.c > +++ b/osdep.c > @@ -166,3 +166,70 @@ int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen) > > return ret; > } > + > +/* > + * A variant of send(2) which handles partial write. > + * > + * Return the number of bytes transferred, which is only > + * smaller than `count' if there is an error. > + * > + * This function won't work with non-blocking fd's. > + * Any of the possibilities with non-bloking fd's is bad: > + * - return a short write (then name is wrong) > + * - busy wait adding (errno == EAGAIN) to the loop > + */ > +ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags) > +{ > + ssize_t ret = 0; > + ssize_t total = 0; > + > + while (count) { > + ret = send(fd, buf, count, flags); > + if (ret < 0) { > + if (errno == EINTR) { > + continue; > + } > + break; > + } > + > + count -= ret; > + buf += ret; > + total += ret; > + } > + > + return total; > +} > + > +/* > + * A variant of recv(2) which handles partial write. > + * > + * Return the number of bytes transferred, which is only > + * smaller than `count' if there is an error. > + * > + * This function won't work with non-blocking fd's. > + * Any of the possibilities with non-bloking fd's is bad: > + * - return a short write (then name is wrong) > + * - busy wait adding (errno == EAGAIN) to the loop > + */ > +ssize_t qemu_recv_full(int fd, const void *buf, size_t count, int flags) > +{ > + ssize_t ret = 0; > + ssize_t total = 0; > + > + while (count) { > + ret = recv(fd, buf, count, flags); osdep.c: In function 'qemu_recv_full': osdep.c:220: error: passing argument 2 of 'recv' discards qualifiers from pointer target type /usr/include/bits/socket2.h:35: note: expected 'void *' but argument is of type 'const void *' Kevin