diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 5c04fb4b7..7b69aadc4 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -476,14 +477,13 @@ int tcp_connect_server(struct stream_interface *si) if ((si->ob->flags & BF_OUT_EMPTY) || si->send_proxy_ofs) { fdtab[fd].cb[DIR_RD].f = tcp_connect_read; fdtab[fd].cb[DIR_WR].f = tcp_connect_write; - fdtab[fd].iocb = NULL; } else { - fdtab[fd].cb[DIR_RD].f = si_data(si)->read; - fdtab[fd].cb[DIR_WR].f = si_data(si)->write; - fdtab[fd].iocb = NULL; + fdtab[fd].cb[DIR_RD].f = NULL; + fdtab[fd].cb[DIR_WR].f = NULL; } + fdtab[fd].iocb = conn_fd_handler; fd_insert(fd); EV_FD_SET(fd, DIR_WR); /* for connect status */ @@ -618,8 +618,8 @@ static int tcp_connect_write(int fd) /* The FD is ready now, we can hand the handlers to the socket layer * and forward the event there to start working on the socket. */ - fdtab[fd].cb[DIR_RD].f = si_data(si)->read; - fdtab[fd].cb[DIR_WR].f = si_data(si)->write; + fdtab[fd].cb[DIR_RD].f = NULL; + fdtab[fd].cb[DIR_WR].f = NULL; si->conn.flags &= ~CO_FL_WAIT_L4_CONN; si->exp = TICK_ETERNITY; return si_data(si)->write(fd); diff --git a/src/session.c b/src/session.c index 0b0c3dacb..0e6c11e0d 100644 --- a/src/session.c +++ b/src/session.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -282,9 +283,9 @@ int session_accept(struct listener *l, int cfd, struct sockaddr_storage *addr) fd_insert(cfd); fdtab[cfd].owner = &s->si[0]; fdtab[cfd].flags = 0; - fdtab[cfd].cb[DIR_RD].f = si_data(&s->si[0])->read; - fdtab[cfd].cb[DIR_WR].f = si_data(&s->si[0])->write; - fdtab[cfd].iocb = NULL; + fdtab[cfd].cb[DIR_RD].f = NULL; + fdtab[cfd].cb[DIR_WR].f = NULL; + fdtab[cfd].iocb = conn_fd_handler; EV_FD_SET(cfd, DIR_RD); if (p->accept && (ret = p->accept(s)) <= 0) {