Having reviewed this in full, I stringly agree with my own comment :).   You have three lists, `connected_peers`, `new_peers` and `_peers`.  It would be good to give a quick bullet-point rundown of how they're used, something like:

 1. Perform a DNS resolution to gain `targets`
 2. Create a list of `connected_peers` by filtering `_peers`
 3. Disconnect some peers if we currently have more than `_max_peers`
    * Don't ever disconnect peers that appear in targets, we prefer these to all others
 4. Connect to all newly-discovered peers (even if that pushes us over `_max_peers`)

You could even go as far as then numbering your section comments (or moving each section into a dedicated function with a sensible name).