43 lines
719 B
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()
|
|
}
|