From 3c4432e0f2fb8ddf54a2e441063d584b99572a4e Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 26 Mar 2020 00:29:12 +0300 Subject: add tun socket --- pkg/server/tunnel.go | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'pkg/server/tunnel.go') diff --git a/pkg/server/tunnel.go b/pkg/server/tunnel.go index 79734b9..4543714 100644 --- a/pkg/server/tunnel.go +++ b/pkg/server/tunnel.go @@ -146,10 +146,10 @@ func (t *tunnel) serve() { } } else if t.alive() { log.Println(t, err) - t.sleep(5 * time.Second) } if !ok { + t.sleep(5 * time.Second) t.release() } } @@ -234,7 +234,21 @@ func (s *stream) channel(c socket.Channel, m *metric, rq, wq queue.Q) { watch := func(q queue.Q, f func(q queue.Q) error) { defer s.wg.Done() - if err := f(q); err != nil && !errors.Is(err, io.EOF) { + err := f(q) + + if errors.Is(err, io.EOF) { + err = nil + } + + if e := c.Close(); e != nil { + if e == socket.ErrAlreadyClosed { + err = nil + } else { + err = e + } + } + + if err != nil { log.Println(s.t, s, err) } } @@ -377,7 +391,7 @@ func isOkTunnelName(s string) bool { func tunnelAdd(r *request) { args := r.args name := "" - limit := maxQueueLimit + limit := 1 for len(args) > 1 { if args[0] == "name" { @@ -394,8 +408,17 @@ func tunnelAdd(r *request) { continue } - if args[0] == "mono" { - limit = 1 + if args[0] == "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 args = args[1:] continue } -- cgit v1.2.3-70-g09d2