From f1abb745fec968d6d9859d1e80bc5bc35c512846 Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 26 Apr 2025 07:57:20 +0800 Subject: [PATCH] fix(tcp): return a dummy connection instead of nil --- internal/acl/tcp_listener.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/acl/tcp_listener.go b/internal/acl/tcp_listener.go index c9361d1..b6b4a7a 100644 --- a/internal/acl/tcp_listener.go +++ b/internal/acl/tcp_listener.go @@ -1,7 +1,9 @@ package acl import ( + "io" "net" + "time" ) type TCPListener struct { @@ -9,6 +11,17 @@ type TCPListener struct { lis net.Listener } +type noConn struct{} + +func (noConn) Read(b []byte) (int, error) { return 0, io.EOF } +func (noConn) Write(b []byte) (int, error) { return 0, io.EOF } +func (noConn) Close() error { return nil } +func (noConn) LocalAddr() net.Addr { return nil } +func (noConn) RemoteAddr() net.Addr { return nil } +func (noConn) SetDeadline(t time.Time) error { return nil } +func (noConn) SetReadDeadline(t time.Time) error { return nil } +func (noConn) SetWriteDeadline(t time.Time) error { return nil } + func (cfg *Config) WrapTCP(lis net.Listener) net.Listener { if cfg == nil { return lis @@ -32,11 +45,11 @@ func (s *TCPListener) Accept() (net.Conn, error) { if !ok { // Not a TCPAddr, drop c.Close() - return nil, nil + return noConn{}, nil } if !s.acl.IPAllowed(addr.IP) { c.Close() - return nil, nil + return noConn{}, nil } return c, nil }