From 9360fb553ffe28cbd85d995e9ea625e34b9d9f09 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Wed, 8 Oct 2014 18:00:03 +0800 Subject: [PATCH] fix #122 --- src/local.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/local.c b/src/local.c index 59400752..d3f17c19 100644 --- a/src/local.c +++ b/src/local.c @@ -242,10 +242,18 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) if (!remote->send_ctx->connected) { + remote->buf_idx = 0; + remote->buf_len = r; + if (!fast_open || remote->direct) { // connecting, wait until connected connect(remote->fd, remote->addr_info->ai_addr, remote->addr_info->ai_addrlen); + + // wait on remote connected event + ev_io_stop(EV_A_ &server_recv_ctx->io); + ev_io_start(EV_A_ &remote->send_ctx->io); + ev_timer_start(EV_A_ &remote->send_ctx->watcher); } else { @@ -282,18 +290,17 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) remote->buf_len = r - s; remote->buf_idx = s; } + + // Just connected + remote->send_ctx->connected = 1; + ev_timer_stop(EV_A_ &remote->send_ctx->watcher); + ev_io_start(EV_A_ &remote->recv_ctx->io); #else // if TCP_FASTOPEN is not defined, fast_open will always be 0 LOGE("can't come here"); exit(1); #endif } - // wait on remote connected event - remote->buf_idx = 0; - remote->buf_len = r; - ev_io_stop(EV_A_ &server_recv_ctx->io); - ev_io_start(EV_A_ &remote->send_ctx->io); - ev_timer_start(EV_A_ &remote->send_ctx->watcher); } else {