From cccb9f9ec42cf44aae66147bcf507b5912e71c7e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 26 Apr 2026 23:32:50 +0000 Subject: [PATCH 1/2] fix: preserve ipv6 wildcard preconn binds Agent-Logs-Url: https://github.com/Xeloan/flvx-tcppreconn/sessions/6bf9be86-c477-4973-a23c-7780c9a11974 Co-authored-by: Xeloan <105624127+Xeloan@users.noreply.github.com> --- go-gost/x/socket/preconn_manager.go | 2 +- go-gost/x/socket/preconn_manager_test.go | 52 ++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 go-gost/x/socket/preconn_manager_test.go diff --git a/go-gost/x/socket/preconn_manager.go b/go-gost/x/socket/preconn_manager.go index 346812d..2528a66 100644 --- a/go-gost/x/socket/preconn_manager.go +++ b/go-gost/x/socket/preconn_manager.go @@ -164,7 +164,7 @@ func parseListenAddr(addr string) (string, string, error) { if err != nil { return "", "", err } - if host == "" || host == "0.0.0.0" || host == "::" { + if host == "" || host == "0.0.0.0" { host = "0.0.0.0" } return host, port, nil diff --git a/go-gost/x/socket/preconn_manager_test.go b/go-gost/x/socket/preconn_manager_test.go new file mode 100644 index 0000000..60c34d1 --- /dev/null +++ b/go-gost/x/socket/preconn_manager_test.go @@ -0,0 +1,52 @@ +package socket + +import "testing" + +func TestParseListenAddr(t *testing.T) { + tests := []struct { + name string + addr string + wantHost string + wantPort string + }{ + { + name: "defaults empty host to ipv4 wildcard", + addr: ":32000", + wantHost: "0.0.0.0", + wantPort: "32000", + }, + { + name: "keeps ipv4 wildcard", + addr: "0.0.0.0:32001", + wantHost: "0.0.0.0", + wantPort: "32001", + }, + { + name: "keeps ipv6 wildcard", + addr: "[::]:32002", + wantHost: "::", + wantPort: "32002", + }, + { + name: "keeps specific ipv6 address", + addr: "[2001:db8::1]:32003", + wantHost: "2001:db8::1", + wantPort: "32003", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gotHost, gotPort, err := parseListenAddr(tt.addr) + if err != nil { + t.Fatalf("parseListenAddr returned error: %v", err) + } + if gotHost != tt.wantHost { + t.Fatalf("expected host %q, got %q", tt.wantHost, gotHost) + } + if gotPort != tt.wantPort { + t.Fatalf("expected port %q, got %q", tt.wantPort, gotPort) + } + }) + } +} From 5eb988d2b76bbca56e8f35ee699cabfda6e7c80f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 26 Apr 2026 23:35:07 +0000 Subject: [PATCH 2/2] docs: clarify preconn wildcard bind behavior Agent-Logs-Url: https://github.com/Xeloan/flvx-tcppreconn/sessions/6bf9be86-c477-4973-a23c-7780c9a11974 Co-authored-by: Xeloan <105624127+Xeloan@users.noreply.github.com> --- go-gost/x/socket/preconn_manager.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go-gost/x/socket/preconn_manager.go b/go-gost/x/socket/preconn_manager.go index 2528a66..441f18b 100644 --- a/go-gost/x/socket/preconn_manager.go +++ b/go-gost/x/socket/preconn_manager.go @@ -165,6 +165,8 @@ func parseListenAddr(addr string) (string, string, error) { return "", "", err } if host == "" || host == "0.0.0.0" { + // Keep the legacy empty-host behavior mapped to IPv4 wildcard, but + // preserve an explicit "::" so dual-stack listeners stay IPv6-capable. host = "0.0.0.0" } return host, port, nil