HTTPサーバーに干渉するクラスがあります。意味のあるコード部分は次のとおりです。
const QString someClass::BASEURL = QString("http://127.0.0.1:8000/?");
someClass::someClass():
manager(new QNetworkAccessManager(this))
{
}
QNetworkReply *someClass::run(QString request)
{
qDebug() << request;
QEventLoop loop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
QNetworkReply *res = manager->get(QNetworkRequest(QUrl(BASEURL + request)));
loop.exec();
return res;
}
run()メソッドを呼び出すと、(毎回ではなく)2つの同一のGETリクエストが発生することがあります(tcpdumpで調べました)。qDebug()は1回実行されます。
コードにエラーがありますか?考えられる説明がわかりません。
更新:いくつかのtcpdumpouptut調査の後。
2番目の要求の後、FINへの応答としてRSTフラグ付きのパケットを送信します。しかし、問題を引き起こすTCPストリームとそうでないTCPストリームに違いは見られません。
ここでのFeはwiresharkの出力です。ストリーム8はうまくいきました。ストリーム11はストリーム12と複製されました。
私はこれで立ち往生しています。サーバーサイズからのプロトコルエラーかもしれませんが、よくわかりません。または、QNetworkAccessManagerのバグかもしれません。