httpを使用してファイルを送信するクライアントとサーバーがあり、tcpdumpを使用して、httpヘッダーを受信した後、サーバーがACKを送信するたびに、サーバーが2つのリセットパケットを受信し、パケットを正常に受信した後にリセットを受信することがわかりましたhttp コンテンツが含まれています。
サーバー側の tcpdump データのタイムラインは次のようになります。
01:10:01.553222------data:http header
01:10:01.553233----------ack
01:10:01.590075-----------reset
01:10:01.590103-----------reset
curl オプション設定コード:
curl_easy_setopt(curl_obj, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl_obj, CURLOPT_WRITEFUNCTION, WriteData);
curl_easy_setopt(curl_obj, CURLOPT_WRITEDATA, &sbuf);
curl_easy_setopt(curl_obj, CURLOPT_COOKIEFILE, "cookie");
curl_easy_setopt(curl_obj, CURLOPT_POST, 1L);
curl_easy_setopt(curl_obj, CURLOPT_READFUNCTION, ReadCallback);
curl_easy_setopt(curl_obj, CURLOPT_READDATA, this);
curl_easy_setopt(curl_obj, CURLOPT_POSTFIELDSIZE, block_size);
curl_easy_setopt(curl_obj, CURLOPT_NOPROGRESS, 0);
curl_easy_setopt(curl_obj, CURLOPT_PROGRESSFUNCTION, ProgressCallback);
curl_easy_setopt(curl_obj, CURLOPT_PROGRESSDATA, this)
それで、私が聞きたいのは、送信されたデータのACKを限られた時間内に受信しないときにtcpをリセットするためのタイムアウトを設定するためのlibcurlのオプションがいくつかあるということです。クライアントとサーバーが同じ都市にあり、インターネット接続が高速な場合、このシステムは正常に動作するため、ビジネス コードにバグはありません。
ps: curl は errorno 56 を返します