열혈강의 tcp/ip 챕터5에 있는 소스 일부 입니다.
for(i=0; i<5; i++)
{
opndCnt=0;
hClntSock=accept(hServSock, (SOCKADDR*)&clntAdr, &clntAdrSize);
// accept함수 1번째 인자로는 응답받는 서버소켓, 2번째인자는 요청된 클라이언트의 주소를 저장할 변수의 주소값, 3번째인자는 2번째인자의 크기를 바이트단위로 전달, 종료후에는 2번째인자에 채워지는 주소정보의 크기가 저장됨.
recv(hClntSock, &opndCnt, 1, 0); // 참고 int opndCnt
recvLen=0;
while((opndCnt*OPSZ+1)>recvLen) //참고 #define OPSZ
{
recvCnt=recv(hClntSock, &opinfo[recvLen], BUF_SIZE-1, 0);
recvLen+=recvCnt;
}
result=calculate(opndCnt, (int*)opinfo, opinfo[recvLen-1]);
send(hClntSock, (char*)&result, sizeof(result), 0);
closesocket(hClntSock);
}
tcp는 산탄총마냥 데이터를 지 멋대로 잘라서 보내잖아요? 그래서
위 코드의 while문 안쪽이 그 데이터를 붙이는 부분인건 알겠는데..
도대체 그 위 recv(빨간부분) 왜 하나요? 때문에
while문의 조건부분의 opndCnt얘 도대체 왜 필요한가요?
물론 데이터 수신을 위한 부분인것은 알겠지만 왜? opndCnt*OPSZ+1 인지?
이론만 쭉쭉 스킵하면서 보아서 소스 첨으로 봤는데 ㅠㅠ
--------------------------
위와는 별개로
올해 군대를 가려하는데 (크흑..)
공군 전자계산 어떤가요?