fix: multi issues - TUN read loop, SDWAN routing for TenantID=0, WS keepalive 10s
This commit is contained in:
@@ -103,6 +103,33 @@ func (c *Conn) Request(mainType, subType uint16, payload interface{},
|
||||
|
||||
// ReadLoop reads messages and dispatches to handlers. Blocks until error or Close().
|
||||
func (c *Conn) ReadLoop() error {
|
||||
// keepalive to avoid idle close (read deadline = 3x ping interval)
|
||||
_ = c.ws.SetReadDeadline(time.Now().Add(90 * time.Second))
|
||||
c.ws.SetPongHandler(func(string) error {
|
||||
_ = c.ws.SetReadDeadline(time.Now().Add(90 * time.Second))
|
||||
return nil
|
||||
})
|
||||
|
||||
// Send ping frames periodically to keep NAT/WSS alive
|
||||
// Increased frequency to 10s for better resilience against network hiccups
|
||||
go func() {
|
||||
ticker := time.NewTicker(10 * time.Second)
|
||||
defer ticker.Stop()
|
||||
for {
|
||||
select {
|
||||
case <-c.quit:
|
||||
return
|
||||
case <-ticker.C:
|
||||
c.writeMu.Lock()
|
||||
_ = c.ws.SetWriteDeadline(time.Now().Add(5 * time.Second))
|
||||
err := c.ws.WriteMessage(websocket.PingMessage, []byte(time.Now().Format("20060102150405")))
|
||||
if err != nil {
|
||||
log.Printf("[signal] ping failed: %v, will reconnect", err)
|
||||
}
|
||||
c.writeMu.Unlock()
|
||||
}
|
||||
}
|
||||
}()
|
||||
for {
|
||||
_, msg, err := c.ws.ReadMessage()
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user