summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHani Benhabiles <kroosec@gmail.com>2014-05-31 22:39:42 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2014-06-30 12:50:12 +0200
commit27e5eae4577316f7e86a56eb7363d4e78f79e3e5 (patch)
tree0b9cb3ee01251283aa32f48f19491240a80aafeb
parent8c5d1abbb79193dca8e4823ef53d8d1e650362ae (diff)
downloadqemu-27e5eae4577316f7e86a56eb7363d4e78f79e3e5.tar.gz
qemu-27e5eae4577316f7e86a56eb7363d4e78f79e3e5.tar.bz2
qemu-27e5eae4577316f7e86a56eb7363d4e78f79e3e5.zip
nbd: Shutdown socket before closing.
This forces finishing data sending to client before closing the socket like in exports listing or replying with NBD_REP_ERR_UNSUP cases. Signed-off-by: Hani Benhabiles <kroosec@gmail.com> Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--blockdev-nbd.c1
-rw-r--r--qemu-nbd.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/blockdev-nbd.c b/blockdev-nbd.c
index 18dc528761..b3a24740b2 100644
--- a/blockdev-nbd.c
+++ b/blockdev-nbd.c
@@ -28,6 +28,7 @@ static void nbd_accept(void *opaque)
int fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len);
if (fd >= 0 && !nbd_client_new(NULL, fd, nbd_client_put)) {
+ shutdown(fd, 2);
close(fd);
}
}
diff --git a/qemu-nbd.c b/qemu-nbd.c
index ba6043680a..626e5844f9 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -372,6 +372,7 @@ static void nbd_accept(void *opaque)
if (nbd_client_new(exp, fd, nbd_client_closed)) {
nb_fds++;
} else {
+ shutdown(fd, 2);
close(fd);
}
}