[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/3] nbd: Shutdown socket before closing.
From: |
Hani Benhabiles |
Subject: |
Re: [Qemu-devel] [PATCH 3/3] nbd: Shutdown socket before closing. |
Date: |
Wed, 4 Jun 2014 23:33:46 +0100 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Tue, Jun 03, 2014 at 01:33:41PM +0200, Paolo Bonzini wrote:
> Il 31/05/2014 23:39, Hani Benhabiles ha scritto:
> >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 <address@hidden>
> >---
> > blockdev-nbd.c | 1 +
> > qemu-nbd.c | 1 +
> > 2 files changed, 2 insertions(+)
> >
> >diff --git a/blockdev-nbd.c b/blockdev-nbd.c
> >index b60b66d..e609f66 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, SHUT_RDWR);
> > close(fd);
> > }
> > }
> >diff --git a/qemu-nbd.c b/qemu-nbd.c
> >index ba60436..bf42861 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, SHUT_RDWR);
> > close(fd);
> > }
> > }
> >
>
> IIUC, what this does is ensure that the other side gets a FIN before it gets
> a RST. Is this correct?
Yes. Without shutdown(), this could be reproduced (unreliably) on multiple
tries. This is done in nbd_client_close() too, for the same reasons AFAICT.