From f3270cb6c876ffa1e2ae238045c1ace1cd2e6350 Mon Sep 17 00:00:00 2001 From: ruti <> Date: Sun, 15 Feb 2026 00:16:13 +0300 Subject: [PATCH] Separate connect error and torst --- extend.c | 18 ++++++++++++------ extend.h | 2 +- main.c | 7 +++++-- params.h | 1 + proxy.c | 4 ++-- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/extend.c b/extend.c index cee1d77..640a961 100644 --- a/extend.c +++ b/extend.c @@ -122,11 +122,11 @@ int on_socks_recv(struct poolhd *pool, struct eval *val, int t) ssize_t n = recv(val->fd, (char *)&r, sizeof(r), 0); if (n < 2) { uniperror("socks recv"); - return on_torst(pool, val); + return on_connerr(pool, val); } if (r.ver != S_VER5 || r.cmd != 0x00) { LOG(LOG_E, "socks answer: %d\n", r.cmd); - return on_torst(pool, val); + return on_connerr(pool, val); } if (val->conn_state != FLAG_S5) { r.cmd = S_CMD_CONN; @@ -134,7 +134,7 @@ int on_socks_recv(struct poolhd *pool, struct eval *val, int t) if (send(val->fd, (char *)&r, len, 0) < 0) { uniperror("socks send"); - return on_torst(pool, val); + return on_connerr(pool, val); } val->conn_state = FLAG_S5; return 0; @@ -150,7 +150,7 @@ int on_socks_conn(struct poolhd *pool, struct eval *val, int t) if (send(val->fd, (char *)data, sizeof(data), 0) < 0) { uniperror("socks send"); - return on_torst(pool, val); + return on_connerr(pool, val); } if (mod_etype(pool, val, POLLIN) || mod_etype(pool, val->pair, POLLIN)) { @@ -359,7 +359,7 @@ static void swop_groups(struct desync_params *dpc, struct desync_params *dpn) } -static int on_trigger(int type, struct poolhd *pool, struct eval *val, bool client_alive) +int on_trigger(int type, struct poolhd *pool, struct eval *val, bool client_alive) { struct eval *lav = val->pair; @@ -426,7 +426,7 @@ static int on_trigger(int type, struct poolhd *pool, struct eval *val, bool clie } -int on_torst(struct poolhd *pool, struct eval *val) +static int on_torst(struct poolhd *pool, struct eval *val) { if (on_trigger(DETECT_TORST, pool, val, 1) == 0) { return 0; @@ -466,6 +466,12 @@ int on_timeout(struct poolhd *pool, struct eval *val) { } +int on_connerr(struct poolhd *pool, struct eval *val) +{ + return on_trigger(DETECT_CONNECT, pool, val, 1); +} + + static int on_response(struct poolhd *pool, struct eval *val, const char *resp, ssize_t sn) { diff --git a/extend.h b/extend.h index 2b0fe25..4b9f220 100644 --- a/extend.h +++ b/extend.h @@ -22,7 +22,7 @@ ssize_t udp_hook(struct eval *val, static bool check_l34(struct desync_params *dp, int st, const union sockaddr_u *dst); -int on_torst(struct poolhd *pool, struct eval *val); +int on_connerr(struct poolhd *pool, struct eval *val); int on_timeout(struct poolhd *pool, struct eval *val); diff --git a/main.c b/main.c index ac10b67..7a5f3a1 100644 --- a/main.c +++ b/main.c @@ -84,8 +84,8 @@ static const char help_text[] = { #ifdef TCP_FASTOPEN_CONNECT " -F, --tfo Enable TCP Fast Open\n" #endif - " -A, --auto Try desync params after this option\n" - " Detect: torst,redirect,ssl_err,none; keep,pri=\n" + " -A, --auto Try desync params after this option\n" + " Detect: torst,redirect,ssl_err,none,conn,keep,pri=\n" " -L, --auto-mode Mode: sort\n" " -y, --cache-dump Dump cache to file or stdout\n" #ifdef TIMEOUT_SUPPORT @@ -836,6 +836,9 @@ int parse_args(int argc, char **argv) case 'k': dp->detect |= DETECT_RECONN; break; + case 'c': + dp->detect |= DETECT_CONNECT; + break; case 'n': break; case 'p': diff --git a/params.h b/params.h index 6efe0c9..0be6d33 100644 --- a/params.h +++ b/params.h @@ -33,6 +33,7 @@ #define DETECT_TLS_ERR 2 #define DETECT_TORST 8 #define DETECT_RECONN 16 +#define DETECT_CONNECT 32 #define AUTO_RECONN 1 #define AUTO_NOPOST 2 diff --git a/proxy.c b/proxy.c index 4ca4e55..36781d3 100644 --- a/proxy.c +++ b/proxy.c @@ -951,8 +951,8 @@ int on_connect(struct poolhd *pool, struct eval *val, int et) case ECONNRESET: case ECONNREFUSED: case ETIMEDOUT: - case EHOSTUNREACH: - if (on_torst(pool, val) == 0) { + //case EHOSTUNREACH: + if (on_connerr(pool, val) == 0) { return 0; } }