From 1c4c61c90272fe251245da5f30b6134ba5a410f1 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Tue, 19 May 2020 01:47:49 +0300 Subject: add redirect listen option --- pkg/server/socket/socket.go | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) (limited to 'pkg/server/socket/socket.go') diff --git a/pkg/server/socket/socket.go b/pkg/server/socket/socket.go index 48c06b4..b419468 100644 --- a/pkg/server/socket/socket.go +++ b/pkg/server/socket/socket.go @@ -14,11 +14,6 @@ import ( var ErrAlreadyClosed = errors.New("already closed") -type exported struct { - info string - Conn -} - type Conn interface { Send(wq queue.Q) error Recv(rq queue.Q) error @@ -30,23 +25,17 @@ type S interface { Close() } -type listenSocket struct { - proto, addr string - listen net.Listener -} - type conn struct { net.Conn - once sync.Once -} -func (c exported) String() string { - return c.info + desc string + info string + + once sync.Once } -func newConn(cn net.Conn) Conn { - c := &conn{Conn: cn} - log.Println("open", c) +func newConn(cn net.Conn, desc, info string) *conn { + c := &conn{Conn: cn, desc: desc, info: info} return c } @@ -59,22 +48,21 @@ func (c *conn) Recv(rq queue.Q) error { } func (c *conn) String() string { - local, remote := c.LocalAddr(), c.RemoteAddr() - return fmt.Sprintf("%s/%s->%s", local.Network(), local, remote) + return c.info } func (c *conn) Close() error { err := ErrAlreadyClosed c.once.Do(func() { - log.Println("close", c) + log.Println("close", c.desc) err = c.Conn.Close() }) return err } -func New(desc string, env env.Env) (S, error) { +func New(desc string) (S, error) { base, opts := opts.Parse(desc) args := strings.SplitN(base, "/", 2) @@ -104,11 +92,11 @@ func New(desc string, env env.Env) (S, error) { return newTunSocket(addr) } - if _, ok := opts["listen"]; ok { - return newListenSocket(proto, addr) + if opts.Bool("listen") { + return newListenSocket(proto, addr, opts) } - if _, ok := opts["defer"]; ok { + if opts.Bool("defer") { return newDeferSocket(proto, addr) } -- cgit v1.2.3-70-g09d2