Socket 통신중, recv시에 0이 return 되지 않는현상?
글쓴이: twins99 / 작성시간: 월, 2006/03/06 - 10:22오전
Socket통신 중에 HTTP msg를 send한 후 recv로 file을 다운로두 합니다.
그런데, recv하는 buff사이즈를 4000으로 해 두고 recv()를 while문으로 걸어서 download를 하게 해 두었는데요,
문제는 파일 전송이 끝났을 때 이 recv가 0을 리턴하지 않네요.
전송이 끝나면 recv가 0을 리턴하지 않나요? 파일전송 끝에 0을 리턴하지 않는 경우는 없는것으로 아는데, 뭐가 잘못된 것인지요..
왜 마냥 블럭되어 기다리는지요..
해당 코드를 한번 첨부해 봅니다.
do{
nReceived= recv(m_nTCPSocketFD, recvBuf,RECV_BUF_SIZE,0);
if(nReceived == 0){
break;
}
if(write(m_nPlayerFD,recvBuf, nReceived)<0)
{
int errn;
errn = errno;
char a[100];
DebugMessage(strerror_r(errn,a,100));
return ERROR;
}
memset(recvBuf, 0, RECV_BUF_SIZE);
nTotal+=nReceived;
//test
fprintf(stderr,"Data Received:%9dbyte\tTotal:%9dbyte\n",nReceived, nTotal);
}while(nReceived>0);
Forums:
socket read 시 0 을
socket read 시 0 을 리턴하는 경우는 접속이 끊어졌을 때 입니다. 아마도 해당 웹서버가 그 커넥션을 이용해서 다시 리퀘스트를 허용하도록 되어 있나봅니다.
HTTP 1.1에서는 bugiii님
HTTP 1.1에서는 bugiii님 말씀처럼 연결을 유지하는 것이 기본입니다. Connection: close 헤더를 추가하시든지 shutdown()을 이용해서 보내는 쪽을 닫아버리면 서버도 close()할 것으로 생각됩니다.
댓글 달기