tailscale/net/pidlisten/pidlisten.go

43 lines
719 B
Go

// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
// Package pidlisten implements a TCP listener that only
// accepts connections from the current process.
package pidlisten
import (
"fmt"
"net"
)
type listener struct {
ln net.Listener
}
func (pln *listener) Accept() (net.Conn, error) {
for {
conn, err := pln.ln.Accept()
if err != nil {
return nil, err
}
ok, err := checkPIDLocal(conn)
if err != nil {
conn.Close()
return nil, fmt.Errorf("pidlisten: %w", err)
}
if !ok {
conn.Close()
continue
}
return conn, nil
}
}
func (pln *listener) Close() error {
return pln.ln.Close()
}
func (pln *listener) Addr() net.Addr {
return pln.ln.Addr()
}