mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-30 22:13:49 +00:00
close tcp conn in time
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-12
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user