diff options
author | Johann Latocha | 2012-04-11 23:13:59 +0200 |
---|---|---|
committer | Johann Latocha | 2012-04-11 23:13:59 +0200 |
commit | 91c882bae2a824562f9fdbb1c117e6448edf4c90 (patch) | |
tree | 8935d9d2192f9b50a4329bf154c62cfbf5f53a70 | |
parent | [SERVER] Cache improved (diff) | |
download | dnbd3-91c882bae2a824562f9fdbb1c117e6448edf4c90.tar.gz dnbd3-91c882bae2a824562f9fdbb1c117e6448edf4c90.tar.xz dnbd3-91c882bae2a824562f9fdbb1c117e6448edf4c90.zip |
[SERVER] tcp-cork
-rw-r--r-- | src/server/net.c | 7 |
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: |