summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--connect.c26
1 files 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;
}