connection.go | 9 +++++++++ diff --git a/connection.go b/connection.go index b1ced80084ad657b55446f02931e304340e676c1..3667cf7ad20fa3c98f69020e7645443998724179 100644 --- a/connection.go +++ b/connection.go @@ -823,6 +823,15 @@ if c.Choked { break } if len(c.PeerRequests) >= maxRequests { + // TODO: Should we drop them or Choke them instead? + break + } + if !t.havePiece(msg.Index.Int()) { + // This isn't necessarily them screwing up. We can drop pieces + // from our storage, and can't communicate this to peers + // except by reconnecting. + requestsReceivedForMissingPieces.Add(1) + err = errors.New("peer requested piece we don't have") break } if c.PeerRequests == nil {