Borealid が指摘しているように、メタデータを持つ誰かが世界に存在しないことを確認する方法はありません (ただし、現時点ではオフラインです)。
誰かが現在 (多かれ少なかれ) メタデータを持っているかどうかを知りたい場合、私の基本的な提案は、少なくとも 1 つの DHT アナウンス間隔を待つことです。
成功するために必要ないくつかの手順があります。
- DHT ブートストラップ (DHT ノードの検索)
- DHT アナウンス (BitTorrent ピアの検索)
- ピアへの接続
- メタデータを持つ (およびメタデータ拡張をサポートする) ピアを持つこと。ピアの大部分は、この拡張機能をサポートしています。
技術的には、各ステップに個別のタイムアウトを設定できます。ブートストラップされ、DHT への有効な接続があると仮定すると、次の懸念事項は、DHT へのアナウンスが機能して完了することを実際に確認することです。
トレントは15 分ごとに DHT に通知することになっています。ただし、dht_announce_interval と呼ばれる libtorrent で構成可能です。DHT に何らかの問題があり、更新を見逃している場合 (たとえば、マグネット リンクを追加したときに DHT が完全にブートストラップされていない場合)、再度通知されるまでさらに 15 分間待つ必要がある場合があります。
心に留めておくべきもう1つのことは、libtorrentでは、DHTアナウンスが時間の経過とともに多かれ少なかれ均等に配布されるように試みられていることです. これは、マグネット リンクが追加された直後に最初の試行が行われない可能性があることを意味します。
ピアが存在するかどうかをより確実にするために、DHT を強制的に更新することもできます (torrent_handle オブジェクトで force_dht_announce() を呼び出します)。これを数分間行うと (ピアが見つからない場合)、最初のアナウンスが失敗する問題に対処することもできます。
接続された bittorrent ピアを取得したら、DHT アナウンスが成功したことをかなり確信できます (ローカル ピア ディスカバリーから取得した場合を除きます)。ピア リスト (torrent_handle::get_peer_info()) を見ると、各 peer_info エントリにはソース フラグ フィールドがあり、DHT からのものかどうかがわかります。
ピアを取得したら、ピア自体がメタデータを持っていないか、送信していない場合に備えて、あきらめる前に、より多くのピアについて学習する機会があることを確認するために、1 PEX 間隔 ( 60 秒) 待機することをお勧めします。それ。
ピアがメタデータまたは pex 拡張機能を具体的にサポートしているかどうかを判断する簡単な方法はありませんが、拡張プロトコルをサポートしていない場合は、どちらもサポートしていません。これは、peer_info::flags と peer_info::supports_extensions で確認できます。
peer_info::connecting または peer_info::handshake ビットがフラグ フィールドに設定されている限り、ピアはスウォームの一部であったランダムな IP である可能性があります。これらのビットがクリアされるまで、ピアが生きている、または存在すると仮定するのは安全ではありません。