diff --git a/go.mod b/go.mod index 25e8915cf3263f1b29375e37bb23fafd4f52e9e5..706ee3ef0a02205ea95d65c8de93efd4799b8496 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/caddyserver/caddy/v2 v2.7.4 github.com/digitalocean/godo v1.102.1 github.com/google/uuid v1.3.0 - github.com/libp2p/go-reuseport v0.4.0 github.com/zalando/postgres-operator v1.8.2 go.uber.org/zap v1.25.0 google.golang.org/api v0.126.0 diff --git a/go.sum b/go.sum index 77f5f2b58a2aa1f586dc378454fb2b3eb30b4699..91e67319bb9289efbb9802a3f740a5306fbb6e00 100644 --- a/go.sum +++ b/go.sum @@ -238,8 +238,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis= github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= -github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= -github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= diff --git a/lib/gat/gatcaddyfile/gattype.go b/lib/gat/gatcaddyfile/gattype.go index 13452f0d67fce64155cddeb25ce3d34eb678f7e4..6800adc05823b9ec542606ab6d411210ff8f3f1b 100644 --- a/lib/gat/gatcaddyfile/gattype.go +++ b/lib/gat/gatcaddyfile/gattype.go @@ -68,17 +68,8 @@ func (ServerType) Setup(blocks []caddyfile.ServerBlock, m map[string]any) (*cadd server.Listen = make([]gat.ListenerConfig, 0, len(block.Keys)) for _, key := range block.Keys { - var listen gat.ListenerConfig - if strings.HasPrefix(key, "/") { - listen = gat.ListenerConfig{ - Network: "unix", - Address: key, - } - } else { - listen = gat.ListenerConfig{ - Network: "tcp", - Address: key, - } + listen := gat.ListenerConfig{ + Address: key, } server.Listen = append(server.Listen, listen) } diff --git a/lib/gat/listen.go b/lib/gat/listen.go index fb2e718ea2c2a1f25752699c7af68ad93501d1f5..f6e813805e95e97ca7d0281de9c8dc17f07f926d 100644 --- a/lib/gat/listen.go +++ b/lib/gat/listen.go @@ -1,19 +1,18 @@ package gat import ( + "context" "encoding/json" "fmt" "net" "github.com/caddyserver/caddy/v2" - "github.com/libp2p/go-reuseport" "go.uber.org/zap" "gfx.cafe/gfx/pggat/lib/fed" ) type ListenerConfig struct { - Network string `json:"network"` Address string `json:"address"` SSL json.RawMessage `json:"ssl,omitempty" caddy:"namespace=pggat.ssl.servers inline_key=provider"` } @@ -21,7 +20,8 @@ type ListenerConfig struct { type Listener struct { ListenerConfig - ssl SSLServer + networkAddress caddy.NetworkAddress + ssl SSLServer listener net.Listener @@ -41,8 +41,15 @@ func (T *Listener) accept() (*fed.Conn, error) { func (T *Listener) Provision(ctx caddy.Context) error { T.log = ctx.Logger() + var err error + T.networkAddress, err = caddy.ParseNetworkAddressWithDefaults(T.Address, "tcp", 5432) + if err != nil { + return fmt.Errorf("parsing address: %v", err) + } + if T.SSL != nil { - val, err := ctx.LoadModule(T, "SSL") + var val any + val, err = ctx.LoadModule(T, "SSL") if err != nil { return fmt.Errorf("loading ssl module: %v", err) } @@ -53,11 +60,11 @@ func (T *Listener) Provision(ctx caddy.Context) error { } func (T *Listener) Start() error { - var err error - T.listener, err = reuseport.Listen(T.Network, T.Address) + listener, err := T.networkAddress.Listen(context.Background(), 0, net.ListenConfig{}) if err != nil { return err } + T.listener = listener.(net.Listener) T.log.Info("listening", zap.String("address", T.listener.Addr().String())) diff --git a/lib/gat/server.go b/lib/gat/server.go index 94501b180ab803c040bcfc9c1a22b09f0c6ee55c..f544c89bf05ad7e62dc83267b4d7a481fc882123 100644 --- a/lib/gat/server.go +++ b/lib/gat/server.go @@ -173,8 +173,11 @@ func (T *Server) accept(listener *Listener, conn *fed.Conn) { func (T *Server) acceptFrom(listener *Listener) bool { conn, err := listener.accept() if err != nil { - if errors.Is(err, net.ErrClosed) { - return false + if netErr, ok := err.(*net.OpError); ok { + // why can't they just expose this error + if netErr.Err.Error() == "listener 'closed' 😉" { + return false + } } T.log.Warn("error accepting client", zap.Error(err)) return true