diff options
Diffstat (limited to 'pkg/server')
| -rw-r--r-- | pkg/server/socket/socket.go | 4 | ||||
| -rw-r--r-- | pkg/server/socket/tun.go | 2 | ||||
| -rw-r--r-- | pkg/server/tunnel.go | 29 |
3 files changed, 25 insertions, 10 deletions
diff --git a/pkg/server/socket/socket.go b/pkg/server/socket/socket.go index b419468..62ce5cf 100644 --- a/pkg/server/socket/socket.go +++ b/pkg/server/socket/socket.go @@ -25,6 +25,10 @@ type S interface { Close() } +type Single interface { + Single() +} + type conn struct { net.Conn diff --git a/pkg/server/socket/tun.go b/pkg/server/socket/tun.go index 7336c04..d48c30c 100644 --- a/pkg/server/socket/tun.go +++ b/pkg/server/socket/tun.go @@ -43,6 +43,8 @@ func (s *tunSocket) String() string { return fmt.Sprintf("tun/%s", s.name) } +func (s *tunSocket) Single() {} + func (s *tunSocket) Open(env.Env) (Conn, error) { fd, err := unix.Open("/dev/net/tun", unix.O_RDWR, 0) if err != nil { diff --git a/pkg/server/tunnel.go b/pkg/server/tunnel.go index ccd501e..afd35d8 100644 --- a/pkg/server/tunnel.go +++ b/pkg/server/tunnel.go @@ -373,6 +373,10 @@ func newTunnel(limit int, args []string, env env.Env) (*tunnel, error) { return nil, err } + if _, ok := in.(socket.Single); ok { + limit = 1 + } + if out, err = socket.New(args[n]); err != nil { in.Close() return nil, err @@ -406,12 +410,16 @@ func isOkTunnelName(s string) bool { } func tunnelAdd(r *request) { + limit := maxQueueLimit + args := r.args name := "" - limit := 1 for len(args) > 1 { - if args[0] == "name" { + noarg := false + + switch args[0] { + case "name": name = args[1] if !isOkTunnelName(name) { r.Fatal("bad name") @@ -422,25 +430,26 @@ func tunnelAdd(r *request) { } args = args[2:] - continue - } - if args[0] == "limit" { + case "limit": if n, _ := strconv.Atoi(args[1]); n > 0 && n < maxQueueLimit { limit = n } else { r.Fatal("bad limit") } args = args[2:] - } - if args[0] == "unlim" { - limit = maxQueueLimit + case "single": + limit = 1 args = args[1:] - continue + + default: + noarg = true } - break + if noarg { + break + } } if len(args) < 2 { |
