From bf8a0156d5580b058bdb6a77048d95ba9dc44da8 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 8 Sep 2013 09:42:08 +0800 Subject: [PATCH] close tcp conn in time --- config.h.in | 5 +++++ debian/config.json | 2 +- openwrt/files/shadowsocks.json | 2 +- src/local.c | 6 ++++++ src/server.c | 26 ++++++++++++++------------ 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/config.h.in b/config.h.in index c0aea8e2..25a8a6fc 100644 --- a/config.h.in +++ b/config.h.in @@ -267,6 +267,11 @@ # endif #endif +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS diff --git a/debian/config.json b/debian/config.json index bfd3ac48..aba1bf28 100644 --- a/debian/config.json +++ b/debian/config.json @@ -3,6 +3,6 @@ "server_port":8388, "local_port":1080, "password":"barfoo!", - "timeout":600, + "timeout":60, "method":null } diff --git a/openwrt/files/shadowsocks.json b/openwrt/files/shadowsocks.json index bfd3ac48..aba1bf28 100644 --- a/openwrt/files/shadowsocks.json +++ b/openwrt/files/shadowsocks.json @@ -3,6 +3,6 @@ "server_port":8388, "local_port":1080, "password":"barfoo!", - "timeout":600, + "timeout":60, "method":null } diff --git a/src/local.c b/src/local.c index 3ec02094..62abe22c 100644 --- a/src/local.c +++ b/src/local.c @@ -350,6 +350,12 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) close_and_free_server(EV_A_ server); return; } + + if (request->cmd == 3) { + close_and_free_remote(EV_A_ remote); + close_and_free_server(EV_A_ server); + return; + } } } diff --git a/src/server.c b/src/server.c index 5e05153d..70a8520d 100644 --- a/src/server.c +++ b/src/server.c @@ -726,7 +726,8 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) struct remote* new_remote(int fd) { - remote_conn++; + if (verbose) remote_conn++; + struct remote *remote; remote = malloc(sizeof(struct remote)); remote->buf = malloc(BUF_SIZE); @@ -747,7 +748,6 @@ struct remote* new_remote(int fd) void free_remote(struct remote *remote) { - remote_conn--; if (remote != NULL) { if (remote->server != NULL) @@ -772,16 +772,18 @@ void close_and_free_remote(EV_P_ struct remote *remote) ev_io_stop(EV_A_ &remote->recv_ctx->io); close(remote->fd); free_remote(remote); - } - if (verbose) - { - LOGD("current remote connection: %d", remote_conn); + if (verbose) + { + remote_conn--; + LOGD("current remote connection: %d", remote_conn); + } } } struct server* new_server(int fd, struct listen_ctx *listener) { - server_conn++; + if (verbose) server_conn++; + struct server *server; server = malloc(sizeof(struct server)); server->buf = malloc(BUF_SIZE); @@ -819,7 +821,6 @@ struct server* new_server(int fd, struct listen_ctx *listener) void free_server(struct server *server) { - server_conn--; if (server != NULL) { if (server->remote != NULL) @@ -856,10 +857,11 @@ void close_and_free_server(EV_P_ struct server *server) ev_timer_stop(EV_A_ &server->recv_ctx->watcher); close(server->fd); free_server(server); - } - if (verbose) - { - LOGD("current server connection: %d", server_conn); + if (verbose) + { + server_conn--; + LOGD("current server connection: %d", server_conn); + } } }