From 4a34c7731b2c9a1c0f172ba97fb76796781a37d9 Mon Sep 17 00:00:00 2001 From: Mark Glines Date: Fri, 27 Mar 2026 12:56:11 -0400 Subject: [PATCH] Use the right syntax for binding to an IPv6 address If the bind address parses as a valid IPv6 address, put it in brackets, like "[::]:9997". Without those brackets, net.Listen() will fail later on, with an error like: > listen tcp: address :::9997: too many colons in address Fixes: #691 --- config/config.go | 6 +++++- config/config_test.go | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 4b104b99f..f960cb9c9 100644 --- a/config/config.go +++ b/config/config.go @@ -727,7 +727,11 @@ type APIServer struct { // BindAddress returns a host:port string. func (a *APIServer) BindAddress() string { - return fmt.Sprintf("%s:%d", a.Bind, a.Port) + bind := a.Bind + if ip := net.ParseIP(bind); ip != nil && ip.To4() == nil { + bind = fmt.Sprintf("[%s]", bind) + } + return fmt.Sprintf("%s:%d", bind, a.Port) } // Validate validates the API server config diff --git a/config/config_test.go b/config/config_test.go index d6b7e88af..4cd1c819f 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -267,6 +267,16 @@ func TestAPIBindAddress(t *testing.T) { err := cfg.Validate() require.Nil(t, err) require.Equal(t, cfg.BindAddress(), "0.0.0.0:9998") + + cfg.Bind = "::" + err = cfg.Validate() + require.Nil(t, err) + require.Equal(t, cfg.BindAddress(), "[::]:9998") + + cfg.Bind = "1:2:3::4" + err = cfg.Validate() + require.Nil(t, err) + require.Equal(t, cfg.BindAddress(), "[1:2:3::4]:9998") } func TestDatabaseConfig(t *testing.T) {