From efee141f1e4dbc8fe5a5aedbf424ea2b0e0bfa39 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 14 Sep 2005 14:21:47 +0000 Subject: improve transfer() --- connect.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/connect.c b/connect.c index 87bfb5f..0b0878a 100644 --- a/connect.c +++ b/connect.c @@ -49,10 +49,28 @@ connecttohost(const char *host, const int port) int transfer(int s, char *buf, int size) { - if (send(s, buf, strlen(buf), 0) == -1) - err(1, "send()"); + int total = 0; + int left = strlen(buf); + int ret = 0; + + while (total < left) { + if ((ret = send(s, buf + total, left, 0)) == -1) + err(1, "send()"); + total += ret; + left -= ret; + } + memset(buf, '\0', size); - if (recv(s, buf, size, 0) == -1) - err(1, "recv()"); + + total = 0; + left = size; + + do { + if ((ret = recv(s, buf + total, size, 0)) == -1) + err(1, "recv()"); + total += ret; + size -= ret; + } while (ret > 0); + return 0; } -- cgit v1.2.3