summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohann Latocha2012-04-11 23:13:59 +0200
committerJohann Latocha2012-04-11 23:13:59 +0200
commit91c882bae2a824562f9fdbb1c117e6448edf4c90 (patch)
tree8935d9d2192f9b50a4329bf154c62cfbf5f53a70 /src
parent[SERVER] Cache improved (diff)
downloaddnbd3-91c882bae2a824562f9fdbb1c117e6448edf4c90.tar.gz
dnbd3-91c882bae2a824562f9fdbb1c117e6448edf4c90.tar.xz
dnbd3-91c882bae2a824562f9fdbb1c117e6448edf4c90.zip
[SERVER] tcp-cork
Diffstat (limited to 'src')
-rw-r--r--src/server/net.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/server/net.c b/src/server/net.c
index 97a0619..7fe5a16 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -30,6 +30,7 @@
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <netinet/tcp.h>
#include "server.h"
#include "utils.h"
@@ -40,6 +41,9 @@ void *dnbd3_handle_query(void *dnbd3_client)
dnbd3_request_t request;
dnbd3_reply_t reply;
+ int cork = 1;
+ int uncork = 0;
+
dnbd3_image_t *image = NULL;
int image_file, image_cache = -1;
@@ -105,6 +109,7 @@ void *dnbd3_handle_query(void *dnbd3_client)
if (image_file < 0)
goto error;
+ setsockopt(client->sock, SOL_TCP, TCP_CORK, &cork, sizeof(cork));
reply.size = request.size;
send(client->sock, (char *) &reply, sizeof(dnbd3_reply_t), 0);
@@ -114,6 +119,7 @@ void *dnbd3_handle_query(void *dnbd3_client)
if (sendfile(client->sock, image_file, (off_t *) &request.offset, request.size) < 0)
printf("ERROR: Sendfile failed (sock)\n");
+ setsockopt(client->sock, SOL_TCP, TCP_CORK, &uncork, sizeof(uncork));
break;
}
@@ -178,6 +184,7 @@ void *dnbd3_handle_query(void *dnbd3_client)
if (sendfile(client->sock, image_cache, (off_t *) &request.offset, request.size) < 0)
printf("ERROR: Sendfile failed (net)\n");
+ setsockopt(client->sock, SOL_TCP, TCP_CORK, &uncork, sizeof(uncork));
break;
default: