io: don't try to close() connection twice, remove shutdown logic.
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 9 Jan 2017 02:03:44 +0000 (12:33 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 9 Jan 2017 02:03:44 +0000 (12:33 +1030)
We were closing before calling del_fd, which also closed.

The shutdown() logic applies when a child and parent are using the
*same* socket fd to communicate to each other.  That's really unusual
(who would you connect to?), and should probably be done by the user.

Generally, you'd use socketpair() for this child-parent case.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ccan/io/poll.c

index 6738f720ec0782f7ade4d67f1f4eba30e8f4b3ef..bd481e9417a835b8f44291b87682a26d750a647d 100644 (file)
@@ -86,13 +86,6 @@ static void del_fd(struct fd *fd)
        }
        num_fds--;
        fd->backend_info = -1;
-
-       /* Closing a local socket doesn't wake poll() because other end
-        * has them open.  See 2.6.  When should I use shutdown()?
-        * in http://www.faqs.org/faqs/unix-faq/socket/ */
-       shutdown(fd->fd, SHUT_RDWR);
-
-       close(fd->fd);
 }
 
 static void destroy_listener(struct io_listener *l)