diff --git a/internal/acl/tcp_listener.go b/internal/acl/tcp_listener.go index 59e40ee0..0597211c 100644 --- a/internal/acl/tcp_listener.go +++ b/internal/acl/tcp_listener.go @@ -1,6 +1,7 @@ package acl import ( + "errors" "io" "net" "time" @@ -54,6 +55,21 @@ func (s *TCPListener) Accept() (net.Conn, error) { return c, nil } +type tcpListener interface { + SetDeadline(t time.Time) error +} + +var _ tcpListener = (*net.TCPListener)(nil) + +func (s *TCPListener) SetDeadline(t time.Time) error { + switch lis := s.lis.(type) { + case tcpListener: + return lis.SetDeadline(t) + default: + return errors.New("not a TCPListener") + } +} + func (s *TCPListener) Close() error { return s.lis.Close() } diff --git a/internal/acl/udp_listener.go b/internal/acl/udp_listener.go index d5338332..7818bd41 100644 --- a/internal/acl/udp_listener.go +++ b/internal/acl/udp_listener.go @@ -1,6 +1,7 @@ package acl import ( + "errors" "net" "time" ) @@ -74,6 +75,31 @@ func (s *UDPListener) SetWriteDeadline(t time.Time) error { return s.lis.SetWriteDeadline(t) } +type udpListener interface { + SetReadBuffer(bytes int) error + SetWriteBuffer(bytes int) error +} + +var _ udpListener = (*net.UDPConn)(nil) + +func (s *UDPListener) SetReadBuffer(bytes int) error { + switch lis := s.lis.(type) { + case udpListener: + return lis.SetReadBuffer(bytes) + default: + return errors.New("not a UDPConn") + } +} + +func (s *UDPListener) SetWriteBuffer(bytes int) error { + switch lis := s.lis.(type) { + case udpListener: + return lis.SetWriteBuffer(bytes) + default: + return errors.New("not a UDPConn") + } +} + func (s *UDPListener) Close() error { return s.lis.Close() }