summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorsr2012-08-25 20:05:04 +0200
committersr2012-08-25 20:05:04 +0200
commit5536f1731c6c603f1b76e2c83ce18c4e610051d7 (patch)
treee91063582c9e7039146a020e3144a2fbeec92932 /src/server/net.c
parent[KERNEL] Fix compiler warning on 32bit systems (diff)
downloaddnbd3-5536f1731c6c603f1b76e2c83ce18c4e610051d7.tar.gz
dnbd3-5536f1731c6c603f1b76e2c83ce18c4e610051d7.tar.xz
dnbd3-5536f1731c6c603f1b76e2c83ce18c4e610051d7.zip
[KERNEL] Only update alt-server list if received from initial server
[*] Add CMD_KEEPALIVE protocol message type
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/server/net.c b/src/server/net.c
index a60b739..c145beb 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -45,7 +45,8 @@ static char recv_request_header(int sock, dnbd3_request_t *request)
// Read request header from socket
if ((ret = recv(sock, request, sizeof(*request), MSG_WAITALL)) != sizeof(*request))
{
- printf("[DEBUG] Error receiving request: Could not read message header (%d)\n", ret);
+ if (ret == 0) return 0;
+ printf("[DEBUG] Error receiving request: Could not read message header (%d/%d)\n", ret, (int)sizeof(*request));
return 0;
}
// Make sure all bytes are in the right order (endianness)
@@ -252,6 +253,9 @@ void *dnbd3_handle_query(void *dnbd3_client)
reply.handle = request.handle;
send_reply(client->sock, &reply, NULL);
+ if (request.size == 0) // Request for 0 bytes, done after sending header
+ break;
+
// caching is off
if (image_cache == -1)
{
@@ -357,6 +361,12 @@ void *dnbd3_handle_query(void *dnbd3_client)
send_reply(client->sock, &reply, server_list);
break;
+ case CMD_KEEPALIVE:
+ reply.cmd = CMD_KEEPALIVE;
+ reply.size = 0;
+ send_reply(client->sock, &reply, NULL);
+ break;
+
default:
memlogf("ERROR: Unknown command\n");
break;