summaryrefslogtreecommitdiff
path: root/pkg/server/socket/socket.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-05-19 01:47:49 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-05-23 01:14:11 +0300
commit1c4c61c90272fe251245da5f30b6134ba5a410f1 (patch)
treed2809dd944de691e66422aec1becb4acc17b9a19 /pkg/server/socket/socket.go
parent2c5259a594f5d8ddf12691deb6a79a0b566f024e (diff)
add redirect listen option
Diffstat (limited to 'pkg/server/socket/socket.go')
-rw-r--r--pkg/server/socket/socket.go36
1 files changed, 12 insertions, 24 deletions
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)
}