tsocket/bsd: also ask for TEVENT_FD_READ when we want to write into a stream socket
authorStefan Metzmacher <metze@samba.org>
Mon, 29 Jun 2009 11:13:05 +0000 (13:13 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 29 Jun 2009 14:03:57 +0000 (16:03 +0200)
Otherwise we would not notice a broken connection.

metze

lib/tsocket/tsocket_bsd.c

index 4f4b166e7da070b70ba7a6ecc6de87360e0c1984..78bca4b0b568d547785a6af55fa53adf34b6ba44 100644 (file)
@@ -1292,6 +1292,10 @@ static void tstream_bsd_fde_handler(struct tevent_context *ev,
        }
        if (flags & TEVENT_FD_READ) {
                if (!bsds->readable_handler) {
+                       if (bsds->writeable_handler) {
+                               bsds->writeable_handler(bsds->writeable_private);
+                               return;
+                       }
                        TEVENT_FD_NOT_READABLE(bsds->fde);
                        return;
                }
@@ -1387,7 +1391,8 @@ static int tstream_bsd_set_writeable_handler(struct tstream_bsd *bsds,
                TALLOC_FREE(bsds->fde);
 
                bsds->fde = tevent_add_fd(ev, bsds,
-                                         bsds->fd, TEVENT_FD_WRITE,
+                                         bsds->fd,
+                                         TEVENT_FD_READ | TEVENT_FD_WRITE,
                                          tstream_bsd_fde_handler,
                                          bsds);
                if (!bsds->fde) {
@@ -1398,7 +1403,9 @@ static int tstream_bsd_set_writeable_handler(struct tstream_bsd *bsds,
                /* cache the event context we're running on */
                bsds->event_ptr = ev;
        } else if (!bsds->writeable_handler) {
-               TEVENT_FD_WRITEABLE(bsds->fde);
+               uint16_t flags = tevent_fd_get_flags(bsds->fde);
+               flags |= TEVENT_FD_READ | TEVENT_FD_WRITE;
+               tevent_fd_set_flags(bsds->fde, flags);
        }
 
        bsds->writeable_handler = handler;