Skip to content

Commit 3141ef5

Browse files
committed
feat: http/socks5 proxy on unix socket
1 parent 8d12718 commit 3141ef5

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

proxy.go

+22-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"net"
77
"net/http"
88
"net/http/httputil"
9+
"os"
910
"strings"
1011

1112
"tailscale.com/net/socks5"
@@ -89,7 +90,24 @@ const (
8990
type Dialer func(ctx context.Context, network, address string) (net.Conn, error)
9091

9192
func StartProxy(logger *Logger, address string, dialer Dialer, proxyType ProxyType) {
92-
listener, err := net.Listen("tcp", address)
93+
var listener net.Listener
94+
var err error
95+
var cleanup func()
96+
97+
if strings.HasPrefix(address, "unix:") {
98+
filename := address[5:]
99+
listener, err = net.Listen("unix", filename)
100+
cleanup = func() {
101+
listener.Close()
102+
os.Remove(filename)
103+
}
104+
} else {
105+
listener, err = net.Listen("tcp", address)
106+
cleanup = func() {
107+
listener.Close()
108+
}
109+
}
110+
93111
if err != nil {
94112
logger.Fatalf("failed to start %s proxy on %s: %v", proxyType, address, err)
95113
}
@@ -112,7 +130,9 @@ func StartProxy(logger *Logger, address string, dialer Dialer, proxyType ProxyTy
112130
}
113131

114132
go func() {
115-
if err := serve(listener); err != nil {
133+
err := serve(listener)
134+
cleanup()
135+
if err != nil {
116136
logger.Fatalf("failed to serve %s proxy on %s: %v", proxyType, address, err)
117137
}
118138
}()

0 commit comments

Comments
 (0)