Implement connection TTLs for multiplexing

This commit is contained in:
9seconds
2019-12-10 14:13:26 +03:00
parent 19efcc93fc
commit acb02baa2e
+9
View File
@@ -4,6 +4,7 @@ import (
"fmt"
"math/rand"
"sync"
"time"
"go.uber.org/zap"
@@ -13,6 +14,8 @@ import (
"github.com/9seconds/mtg/protocol"
)
const connectionTTL = time.Hour
type connection struct {
conn conntypes.PacketReadWriteCloser
proxyConns map[string]*ProxyConn
@@ -31,6 +34,9 @@ type connection struct {
func (c *connection) run() {
defer c.Close()
ttl := time.NewTimer(connectionTTL)
defer ttl.Stop()
for {
select {
case <-c.channelDone:
@@ -39,6 +45,9 @@ func (c *connection) run() {
}
return
case <-ttl.C:
c.logger.Debugw("Closing connection by TTL")
c.Close()
case resp := <-c.channelRead:
if channel, ok := c.proxyConns[string(resp.ConnID[:])]; ok {
if resp.Type == rpc.ProxyResponseTypeCloseExt {