diff options
Diffstat (limited to 'pkg/server/socket/socket.go')
| -rw-r--r-- | pkg/server/socket/socket.go | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/pkg/server/socket/socket.go b/pkg/server/socket/socket.go index a945ce0..7b5ea73 100644 --- a/pkg/server/socket/socket.go +++ b/pkg/server/socket/socket.go @@ -12,7 +12,7 @@ import ( "tunnel/pkg/server/queue" ) -var errAlreadyClosed = errors.New("already closed") +var ErrAlreadyClosed = errors.New("already closed") type exported struct { info string @@ -50,26 +50,12 @@ func newConn(cn net.Conn) Channel { return c } -func (c *conn) final(f func() error, err error) error { - if e := f(); e != nil { - if e == errAlreadyClosed { - return nil - } else { - return e - } - } - - return err -} - func (c *conn) Send(wq queue.Q) error { - err := queue.IoCopy(c, wq.Writer()) - return c.final(c.Close, err) + return queue.IoCopy(c, wq.Writer()) } func (c *conn) Recv(rq queue.Q) error { - err := queue.IoCopy(rq.Reader(), c) - return c.final(c.Close, err) + return queue.IoCopy(rq.Reader(), c) } func (c *conn) String() string { @@ -78,7 +64,7 @@ func (c *conn) String() string { } func (c *conn) Close() error { - err := errAlreadyClosed + err := ErrAlreadyClosed c.once.Do(func() { log.Println("close", c) @@ -113,6 +99,10 @@ func New(desc string, env env.Env) (S, error) { return nil, fmt.Errorf("bad socket '%s'", desc) } + if proto == "tun" { + return newTunSocket(addr) + } + if _, ok := opts["listen"]; ok { return newListenSocket(proto, addr) } |
