이전의 버퍼를 다 받아 오지 않던 문제를 ... 그간 PC 에서 socket processing 하던 편리함에 빠져 그 근본을 잊었던 것 같습니다.
임베디드 보드가 지속적인 메모리의 malloc() 과 free() 때문인지 죽어 버리는 문제가 발생 하지만, 적어도 30MB 의 데이터를 지속적으로 500번 가량 전송 하는데 성공을 했습니다.
이유는 간단히, recv() 함수가 가진 특성을 그간 간과 했기 때문 입니다.
이 사실을 제가 간과 하고 있었네요. 너무나 기초적인 부분인데, 어찌 이런걸 제가 그간 잊고 있었을까요?
그래서 코드를 다음과 같이 수정 하였습니다.
... 어렵지 않은걸 어렵게 돌아 갔었네요 ..
사람은 역시 기초에 항상 충실해야 하는 것 같습니다.
임베디드 보드가 지속적인 메모리의 malloc() 과 free() 때문인지 죽어 버리는 문제가 발생 하지만, 적어도 30MB 의 데이터를 지속적으로 500번 가량 전송 하는데 성공을 했습니다.
이유는 간단히, recv() 함수가 가진 특성을 그간 간과 했기 때문 입니다.
socket 에서 recv() 로 원하는 크기가 다 넘어 오지 않는다.
이 사실을 제가 간과 하고 있었네요. 너무나 기초적인 부분인데, 어찌 이런걸 제가 그간 잊고 있었을까요?
그래서 코드를 다음과 같이 수정 하였습니다.
int nRecvSize = 0; bool bRecvDone = false; printf(".. receiving data :"); memset(pDataBuff, 0, nDataBuffSize); dwPrevTck = GetTickCount(); while(!bRecvDone) { nRet = recv(fdSock,&pDataBuff[nRecvSize],nDataBuffSize,0); if(nRet) { nRecvSize += nRet; if(nRecvSize == nDataBuffSize) bRecvDone = true; } } dwNextTck = GetTickCount();
... 어렵지 않은걸 어렵게 돌아 갔었네요 ..
사람은 역시 기초에 항상 충실해야 하는 것 같습니다.