summaryrefslogtreecommitdiff
path: root/pkg/server/socket/socket.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/socket/socket.go')
-rw-r--r--pkg/server/socket/socket.go26
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)
}