From 980d801a79c8840264b47010af764a9c163ddd55 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Fri, 4 Nov 2016 19:21:21 +0800 Subject: [PATCH] Add timeout support in ss-redir --- src/redir.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/redir.c b/src/redir.c index 6ba901e4..67047ffb 100644 --- a/src/redir.c +++ b/src/redir.c @@ -345,6 +345,8 @@ remote_recv_cb(EV_P_ ev_io *w, int revents) remote_t *remote = remote_recv_ctx->remote; server_t *server = remote->server; + ev_timer_again(EV_A_ & remote->recv_ctx->watcher); + ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0); if (r == 0) { @@ -416,6 +418,7 @@ remote_send_cb(EV_P_ ev_io *w, int revents) ev_io_stop(EV_A_ & remote_send_ctx->io); ev_io_stop(EV_A_ & server->recv_ctx->io); ev_timer_stop(EV_A_ & remote_send_ctx->watcher); + ev_timer_start(EV_A_ & remote->recv_ctx->watcher); // send destaddr buffer_t ss_addr_to_send; @@ -541,6 +544,8 @@ new_remote(int fd, int timeout) ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE); ev_timer_init(&remote->send_ctx->watcher, remote_timeout_cb, min(MAX_CONNECT_TIMEOUT, timeout), 0); + ev_timer_init(&remote->recv_ctx->watcher, remote_timeout_cb, + timeout, 0); balloc(remote->buf, BUF_SIZE); @@ -569,6 +574,7 @@ close_and_free_remote(EV_P_ remote_t *remote) { if (remote != NULL) { ev_timer_stop(EV_A_ & remote->send_ctx->watcher); + ev_timer_stop(EV_A_ & remote->recv_ctx->watcher); ev_io_stop(EV_A_ & remote->send_ctx->io); ev_io_stop(EV_A_ & remote->recv_ctx->io); close(remote->fd); @@ -915,7 +921,7 @@ main(int argc, char **argv) } if (timeout == NULL) { - timeout = "60"; + timeout = "600"; } #ifdef HAVE_SETRLIMIT