summaryrefslogtreecommitdiff
path: root/pkg/server/tunnel.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-03-26 00:29:12 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-03-30 01:57:31 +0300
commit3c4432e0f2fb8ddf54a2e441063d584b99572a4e (patch)
treee1e36bed941a7bbb62b23656eeddd154eec0a920 /pkg/server/tunnel.go
parent5c846ba3a0e5e323b61339572e7a4f917c1d79d4 (diff)
add tun socket
Diffstat (limited to 'pkg/server/tunnel.go')
-rw-r--r--pkg/server/tunnel.go33
1 files changed, 28 insertions, 5 deletions
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
}