Detect server disconnection after NBD_OPT_EXPORTNAME
authorreidrac <jjm@usebox.net>
Sat, 26 Jan 2013 13:15:59 +0000 (13:15 +0000)
committerreidrac <jjm@usebox.net>
Sat, 26 Jan 2013 13:17:40 +0000 (13:17 +0000)
If the export is unknown to the server, it may disconnect (new-style handshake
un-fixed). In that case the read call to get export size may return 0 (non error, EOF).

This change fixes following error:

    nbd-client -N unexistent 127.0.0.1 /dev/nbd0
    Negotiation: ..size = 2314498962MBError: Exported device is too big for me. Get 64-bit machine :-(

    Exiting.

nbd-client.c

index d20f32c1348800c86ba8d3b940fc2719d9a46e7a..49f75eded4ee3f7ef4113aeefe9928dc58346e30 100644 (file)
@@ -283,8 +283,11 @@ void negotiate(int sock, u64 *rsize64, u32 *flags, char* name, uint32_t needed_f
                printf(".");
        }
 
-       if (read(sock, &size64, sizeof(size64)) < 0)
+       if (read(sock, &size64, sizeof(size64)) < 0) {
+               if (!errno)
+                       err("Server closed connection");
                err("Failed/3: %m\n");
+       }
        size64 = ntohll(size64);
 
 #ifdef NBD_SET_SIZE_BLOCKS