From 60c25dbacee069a5c891dff559f1baa8f7751eb2 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Mon, 7 Nov 2016 17:39:55 +0800 Subject: [PATCH] Reduce the side effects --- src/acl.c | 4 ++-- src/server.c | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/acl.c b/src/acl.c index 393ebe32..b7a521a3 100644 --- a/src/acl.c +++ b/src/acl.c @@ -74,7 +74,7 @@ init_iptables() char cli[256]; sprintf(cli, "iptables -N SHADOWSOCKS_LIBEV; \ iptables -F SHADOWSOCKS_LIBEV; \ - iptables -A OUTPUT -p tcp --tcp-flags FIN FIN -j SHADOWSOCKS_LIBEV"); + iptables -A OUTPUT -p tcp --tcp-flags RST RST -j SHADOWSOCKS_LIBEV"); return run_cmd(cli); } @@ -84,7 +84,7 @@ clean_iptables() if (geteuid() != 0) return -1; char cli[256]; - sprintf(cli, "iptables -D OUTPUT -p tcp --tcp-flags FIN FIN -j SHADOWSOCKS_LIBEV; \ + sprintf(cli, "iptables -D OUTPUT -p tcp --tcp-flags RST RST -j SHADOWSOCKS_LIBEV; \ iptables -F SHADOWSOCKS_LIBEV; \ iptables -X SHADOWSOCKS_LIBEV"); return run_cmd(cli); diff --git a/src/server.c b/src/server.c index b264ab63..a316de7f 100644 --- a/src/server.c +++ b/src/server.c @@ -315,6 +315,14 @@ reset_addr(int fd) static void report_addr(int fd, int err_level) { + +#ifdef __linux__ + struct linger so_linger; + so_linger.l_onoff = 1; + so_linger.l_linger = 0; + setsockopt(fd, SOL_SOCKET, SO_LINGER, &so_linger, sizeof so_linger); +#endif + char *peer_name; peer_name = get_peer_name(fd); if (peer_name != NULL) {