From debf10d7ff1478db7fee9488ea16ff121f4df35e Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Thu, 5 Feb 2004 07:58:38 +0000 Subject: [PATCH] Use send_tcp for large buffers SVN revision: 748 --- src/elogd.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/elogd.c b/src/elogd.c index f69629b1..6c2bd959 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.239 2004/02/05 07:58:38 midas + Use send_tcp for large buffers + Revision 1.238 2004/02/05 07:47:27 midas Fixed bug in search display for all logbooks @@ -8527,6 +8530,46 @@ int retrieve_remote_md5(LOGBOOK * lbs, char *host, MD5_INDEX ** md5_index, /*------------------------------------------------------------------*/ +INT send_tcp(int sock, char *buffer, DWORD buffer_size, INT flags) +/********************************************************************\ + + Send network data over TCP port. Break buffer in smaller + parts if larger than maximum TCP buffer size (usually 64k). + +\********************************************************************/ +{ +#ifndef NET_TCP_SIZE +#define NET_TCP_SIZE 65536 +#endif + + DWORD count; + INT status; + + /* transfer fragments until complete buffer is transferred */ + + for (count = 0; count < buffer_size - NET_TCP_SIZE;) { + status = send(sock, buffer + count, NET_TCP_SIZE, flags); + if (status != -1) + count += status; + else { + return status; + } + } + + while (count < buffer_size) { + status = send(sock, buffer + count, buffer_size - count, flags); + if (status != -1) + count += status; + else { + return status; + } + } + + return count; +} + +/*------------------------------------------------------------------*/ + int submit_message(LOGBOOK * lbs, char *host, int message_id, char *error_str) { int size, i, n, status, fh, port, sock, content_length, header_length, remote_id, @@ -8743,7 +8786,7 @@ int submit_message(LOGBOOK * lbs, char *host, int message_id, char *error_str) send(sock, request, header_length, 0); /* send content */ - send(sock, content, content_length, 0); + send_tcp(sock, content, content_length, 0); /* receive response */ i = recv(sock, response, 10000, 0);