Browse Source

close tcp conn in time

pull/14/head
Max Lv 11 years ago
parent
commit
bf8a0156d5
5 changed files with 27 additions and 14 deletions
  1. 5
      config.h.in
  2. 2
      debian/config.json
  3. 2
      openwrt/files/shadowsocks.json
  4. 6
      src/local.c
  5. 26
      src/server.c

5
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

2
debian/config.json

@ -3,6 +3,6 @@
"server_port":8388,
"local_port":1080,
"password":"barfoo!",
"timeout":600,
"timeout":60,
"method":null
}

2
openwrt/files/shadowsocks.json

@ -3,6 +3,6 @@
"server_port":8388,
"local_port":1080,
"password":"barfoo!",
"timeout":600,
"timeout":60,
"method":null
}

6
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;
}
}
}

26
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);
}
}
}

Loading…
Cancel
Save