This commit is contained in:
Andy Wang 2019-08-31 15:32:57 +01:00
parent 2dcb105005
commit 4861efbc50
1 changed files with 24 additions and 11 deletions

View File

@ -99,15 +99,20 @@ func (sb *switchboard) send(data []byte, connId *uint32) (n int, err error) {
if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 { if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 {
return 0, errBrokenSwitchboard return 0, errBrokenSwitchboard
} }
newConnId := rand.Intn(len(sb.conns))
conn, ok = sb.conns[uint32(newConnId)] r := rand.Intn(len(sb.conns))
if !ok { var c int
return 0, errBrokenSwitchboard for newConnId := range sb.conns {
} else { if r == c {
n, err = conn.Write(data) connId = &newConnId
sb.AddTx(int64(n)) conn, _ = sb.conns[newConnId]
return n, err = conn.Write(data)
sb.AddTx(int64(n))
return
}
c++
} }
return 0, errBrokenSwitchboard
} }
} }
@ -120,8 +125,16 @@ func (sb *switchboard) assignRandomConn() (uint32, error) {
if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 { if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 {
return 0, errBrokenSwitchboard return 0, errBrokenSwitchboard
} }
connId := rand.Intn(len(sb.conns))
return uint32(connId), nil r := rand.Intn(len(sb.conns))
var c int
for connId := range sb.conns {
if r == c {
return connId, nil
}
c++
}
return 0, errBrokenSwitchboard
} }
// actively triggered by session.Close() // actively triggered by session.Close()
@ -145,7 +158,7 @@ func (sb *switchboard) deplex(connId uint32, conn net.Conn) {
sb.rxWait(n) sb.rxWait(n)
sb.Valve.AddRx(int64(n)) sb.Valve.AddRx(int64(n))
if err != nil { if err != nil {
log.Tracef("a connection for session %v has closed: %v", sb.session.id, err) log.Debugf("a connection for session %v has closed: %v", sb.session.id, err)
go conn.Close() go conn.Close()
sb.removeConn(connId) sb.removeConn(connId)
return return