我正在編寫一個web代理,它可以很好地處理可以轉換爲ASCII文本的網頁。但是,當我嘗試使用二進制數據(Youtube.com是我一直在使用的那個)查看頁面時,有一處存在內存泄漏,並且在字符串的末尾,相同的幾個字符會一遍又一遍地重複發送給客戶(並且將顯示在其他地方,他們顯然不應該)。C socket只能用二進制數據製作內存泄露
下面是我的代碼的相關部分。 SendHTTPResponse是一個函數,它使用代理將網頁的響應發送給客戶端,並且正常工作。
有沒有人有任何見解?
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);
}
沒有足夠的信息或代碼來回答這個問題。您需要進行一些調試並縮小範圍。 –
難道你不需要接受numBytes == 0作爲有效的返回值,這意味着什麼都沒有在緩衝區中,但流仍然打開,你應該繼續嘗試閱讀? –
errno = 0,numBytes> 0 ????那是什麼?你爲什麼要用這樣的逗號運算符?爲什麼你將errno設置爲0? –