さまざまな理由から、C の粗雑なツールを使用して CRL ファイルをダウンロードしようとしています。古き良き を使用して tcp 接続を開き、socket()
ハードコードされたプレーンテキストの http 要求を 経由で送信しsend()
、結果を 経由でバッファに読み取り、recv()
そのバッファに書き込みます。ファイルに(後でさまざまな証明書を確認するために使用します)。
およびファイルへのrecv()
書き込み部分は while ループ内にあるため、すべてを取得できます。
私の問題は、ファイルの受信がいつ完了したかを判断する信頼できる手段を思いつくのにかなりの時間を費やしていることです(したがって、whileループから抜け出すことができます)。私がこれまでに思いついたものはすべて、偽陽性または偽陰性のいずれかでした (0 バイトを返すことが頻繁に発生し、EOF マーカーが存在しないか、間違ったバイトを探していました)。できれば、多くの追加の複雑さを導入しない手法である必要があります。
本当に、ホスト、ポート、パス (すべてchar*
) があります。遠端には、友好的な http サーバーがあります (ただし、私が制御するものではありません)。大量のコードの複雑さを追加せずにファイルを取得できるものであれば何でも喜んでいます。コマンド ラインにアクセスできる場合は、wget のようなものを使用しますが、C API 側で直接同等のものを見つけることができずsystem()
、状況に適した選択ではありません。