diff --git a/net/transport/yamux/config.go b/net/transport/yamux/config.go index 2afce5fd..48ea710a 100644 --- a/net/transport/yamux/config.go +++ b/net/transport/yamux/config.go @@ -5,7 +5,8 @@ type configGetter interface { } type Config struct { - ListenAddrs []string `yaml:"listenAddrs"` - WriteTimeoutSec int `yaml:"writeTimeoutSec"` - DialTimeoutSec int `yaml:"dialTimeoutSec"` + ListenAddrs []string `yaml:"listenAddrs"` + WriteTimeoutSec int `yaml:"writeTimeoutSec"` + DialTimeoutSec int `yaml:"dialTimeoutSec"` + KeepAlivePeriodSec int `yaml:"keepAlivePeriodSec"` } diff --git a/net/transport/yamux/conn.go b/net/transport/yamux/conn.go index a3406bfa..c752d22d 100644 --- a/net/transport/yamux/conn.go +++ b/net/transport/yamux/conn.go @@ -29,7 +29,6 @@ func (y *yamuxConn) Open(ctx context.Context) (conn net.Conn, err error) { if conn, err = y.Session.Open(); err != nil { return } - conn = connutil.NewTimeout(conn, time.Second*10) return } @@ -52,6 +51,5 @@ func (y *yamuxConn) Accept() (conn net.Conn, err error) { } return } - conn = connutil.NewTimeout(conn, time.Second*10) return } diff --git a/net/transport/yamux/yamux.go b/net/transport/yamux/yamux.go index 2722a76c..1aa8420f 100644 --- a/net/transport/yamux/yamux.go +++ b/net/transport/yamux/yamux.go @@ -51,8 +51,16 @@ func (y *yamuxTransport) Init(a *app.App) (err error) { if y.conf.WriteTimeoutSec <= 0 { y.conf.WriteTimeoutSec = 10 } + y.yamuxConf = yamux.DefaultConfig() - y.yamuxConf.EnableKeepAlive = false + if y.conf.KeepAlivePeriodSec < 0 { + y.yamuxConf.EnableKeepAlive = false + } else { + y.yamuxConf.EnableKeepAlive = true + if y.conf.KeepAlivePeriodSec != 0 { + y.yamuxConf.KeepAliveInterval = time.Duration(y.conf.KeepAlivePeriodSec) * time.Second + } + } y.yamuxConf.StreamOpenTimeout = time.Duration(y.conf.DialTimeoutSec) * time.Second y.yamuxConf.ConnectionWriteTimeout = time.Duration(y.conf.WriteTimeoutSec) * time.Second y.listCtx, y.listCtxCancel = context.WithCancel(context.Background())