ソケットをバインドする前に Qt の SOCKS5 UDP プロキシを設定する
既存の QUdpSocket に setProxy を適用し、要求したポートが維持されたと決めつけずに、実際にバインドされたアドレスとポートを読み取ります。
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
QStringLiteral("proxy.example.net"),
1080);
udpSocket->setProxy(proxy);アプリケーションの既存の QUdpSocket に対して、bind や connect の前にこれを適用します。SOCKS サーバーは UDP アソシエーションを実装している必要があり、プロキシの機能フラグや TCP ブラウジングの成功だけではその動作を検証できません。許可された公開 UDP テストでは、SOCKS5 プロキシ一覧が候補アドレスを提供しますが、各候補の UDP アソシエーションと対象への到達性は個別に確認する必要があります。
| 操作 | Qt が文書化している SOCKS5 UDP の考慮点 |
|---|---|
| bind | タイムアウトする可能性がある |
| 0 以外のローカルポートを要求 | そのポートが使われることを保証しない |
| 結果を確認 | 実際の情報は localPort と localAddress を読む |
リレーは UDP 経路を追加しますが、その経路上でもパケット損失は起こり得ます。プロキシのアカウント値はオブジェクトの user/password プロパティを使います。
プロキシを変更しても接続済みのソケットは移動できません。localhost での試行も慎重に解釈してください。Qt は文書化された localhost アドレスでは connectToHost、bind、listen においてネットワークプロキシを迂回します。