Merge pull request #127 from 9seconds/close-connections

Implement connection TTLs for multiplexing
This commit is contained in:
Sergey Arkhipov
2019-12-10 14:21:34 +03:00
committed by GitHub
+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 {