|
@@ -7,6 +7,7 @@ import (
|
|
|
"io"
|
|
|
"net"
|
|
|
"sync"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
const (
|
|
@@ -80,9 +81,14 @@ func (g *Gateway) loop(ctx context.Context) {
|
|
|
select {
|
|
|
case conn, ok = <-g.ch:
|
|
|
if ok {
|
|
|
+ //set deadline
|
|
|
+ _ = conn.SetReadDeadline(time.Now().Add(time.Millisecond * 800))
|
|
|
if n, err = io.ReadFull(conn, feature); err != nil {
|
|
|
- continue
|
|
|
+ _ = conn.Close()
|
|
|
+ break
|
|
|
}
|
|
|
+ //reset deadline
|
|
|
+ _ = conn.SetReadDeadline(time.Time{})
|
|
|
for _, l := range g.listeners {
|
|
|
if bytes.Equal(feature[:n], l.feature[:n]) {
|
|
|
l.l.Receive(wrapConn(conn, feature[:n]))
|