From 6a2feeba105f42f1fffd11c99bd064fd5a88a5f7 Mon Sep 17 00:00:00 2001 From: Jan Vilhuber Date: Mon, 4 Mar 2024 12:57:34 +0100 Subject: [PATCH 1/2] look for the File() method instead of assuming TCP or Unix Listeners. Makes this more generic and extensible --- net_listener.go | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/net_listener.go b/net_listener.go index e7f9edc1..57a4d9af 100644 --- a/net_listener.go +++ b/net_listener.go @@ -144,18 +144,16 @@ func (ln *listener) Fd() (fd int) { return ln.fd } +type filer interface { + File() (*os.File, error) +} + func (ln *listener) parseFD() (err error) { - switch netln := ln.ln.(type) { - case *net.TCPListener: - ln.file, err = netln.File() - case *net.UnixListener: - ln.file, err = netln.File() - default: - return errors.New("listener type can't support") - } - if err != nil { - return err + netln, ok := ln.ln.(filer) + if !ok { + return errors.New("listener type not supported (no File() method)") } + ln.file, err = netln.File() ln.fd = int(ln.file.Fd()) return nil } From e0ed8689b391a649d219cbec36713a288669c120 Mon Sep 17 00:00:00 2001 From: Jan Vilhuber Date: Mon, 11 Mar 2024 10:51:38 +0100 Subject: [PATCH 2/2] do a little bit more error and nil checking --- net_listener.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net_listener.go b/net_listener.go index 57a4d9af..1a9d9c7e 100644 --- a/net_listener.go +++ b/net_listener.go @@ -154,6 +154,12 @@ func (ln *listener) parseFD() (err error) { return errors.New("listener type not supported (no File() method)") } ln.file, err = netln.File() + if err != nil { + return err + } + if ln.file == nil { + return errors.New("listener type not supported (no file handle)") + } ln.fd = int(ln.file.Fd()) return nil }