return int(min(max(5, extraIncoming)+establishedHeadroom, int64(t.cl.config.HalfOpenConnsPerTorrent)))
}
-func (t *Torrent) openNewConns() {
+func (t *Torrent) openNewConns() (initiated int) {
defer t.updateWantPeersEvent()
for t.peers.Len() != 0 {
if !t.wantConns() {
if len(t.cl.dialers) == 0 {
return
}
+ if t.cl.numHalfOpen >= t.cl.config.TotalHalfOpenConns {
+ return
+ }
p := t.peers.PopMax()
t.initiateConn(p)
+ initiated++
}
+ return
}
func (t *Torrent) getConnPieceInclination() []int {
if peer.Id == t.cl.peerID {
return
}
-
if t.cl.badPeerAddr(peer.Addr) && !peer.Trusted {
return
}
if t.addrActive(addr.String()) {
return
}
+ t.cl.numHalfOpen++
t.halfOpen[addr.String()] = peer
go t.cl.outgoingConnection(t, addr, peer.Source, peer.Trusted)
}