qemu-devel
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]