From 5536f1731c6c603f1b76e2c83ce18c4e610051d7 Mon Sep 17 00:00:00 2001 From: sr Date: Sat, 25 Aug 2012 20:05:04 +0200 Subject: [KERNEL] Only update alt-server list if received from initial server [*] Add CMD_KEEPALIVE protocol message type --- src/server/net.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/server/net.c') 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; -- cgit v1.2.3-55-g7522