웹 프록시를 작성 중이며 ASCII 텍스트로 변환 할 수있는 웹 페이지와 잘 작동합니다. 그러나 이진 데이터가있는 페이지를 보려고하면 (Youtube.com은 내가 사용하고있는 것입니다.), 메모리 누수가 발생하고 같은 수의 문자가 문자열 끝에 반복해서 반복됩니다. 클라이언트에게 보낼 것입니다 (그리고 그들이 분명히해서는 안되는 다른 장소에 나타납니다).C 소켓 이진 데이터로만 메모리 누수가 발생합니다.
다음은 내 코드의 관련 부분입니다. 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으로 설정하고 있습니까? –