일반적인 TCP 소켓 프로그램에서 제목처럼
select() > 0 인데, recv() < 0 인 경우가 어떤 때 나오는지 궁금해서 질문드립니다.
RTSP 클라이언트 프로그램을 작성중인데요,
소켓에서 한 바이트씩 읽어서 /r/n/r/n이 나올 때까지 읽는 프로그램입니다.
소켓 옵션은 특별히 주지 않았구요. 그러니까 blocked socket 이네요.
뭐 이건 non-block 소켓으로도 바꿔 보고 이것저것 해 봤습니다.
아래 소스에서 block_until_readable()의 결과 값이 > 0 (그러니까... select() > 0) 인데,
recv() < 0 이어서
perror("Fail to recv :");
라인에 걸리는 경우가 있습니다.
errno = 104 (ECONNRESET - Connection reset by peer)
라고 나오는군요.
원래대로라면