0

Web プロキシを作成していますが、ASCII テキストに変換できる Web ページでうまく機能しています。ただし、バイナリ データのページを表示しようとすると (Youtube.com は私が使用しているものです)、どこかでメモリ リークが発生し、文字列の末尾に同じ数文字が何度も繰り返されます。クライアントに送信しています (そして、明らかに送信すべきではない他の場所に表示されます)。

以下は私のコードの関連部分です。SendHTTPResponse は、Web ページの応答をプロキシを使用してクライアントに送信する機能であり、正しく動作します。

誰にも洞察力がありますか?

int numBytes;  
char temp[3000];
memset(temp, '\0', 3000);  
numBytes = Read(internetSocket, temp, 2999);  
while (errno = 0, numBytes > 0 || errno == EINTR)
{
  SendHTTPResponse(socket, temp, numBytes);
  memset(temp, '\0', 3000);
  numBytes = Read(internetSocket, temp, 2999);     
}
4

2 に答える 2

1

あなたの質問に答えるために、このコードにはメモリ リークはありません。

また、メモリ リークがこの問題と関係があると考える理由もありません。

ただし、コードが間違っています。errnoメソッドが -1 を返さない限り、設定すべきではなく、テストすべきでもありません。それは読むべきです:

while ((numBytes = Read(socket, temp, sizeof temp)) > 0 || numBytes == -1 && errno == EINTR)
{
   SendHTTPResponse(socket, temp, numBytes);
}

呼び出しは必要なく、渡す長さを適切に通知するmemset()限り、末尾の null のための余地を残す必要はありません。SendHTTPResponse()末尾のヌル自体を探すべきではありません。

そして 3000 は非常に奇妙なバッファ サイズです。私は自分で 8192 を使用します。

于 2013-08-05T01:42:48.263 に答える