소켓 프로그래밍을 할 때 read가 생각대로 작동하지 않는 경우

2008-12-04

기말고사용으로 채팅 프로그램을 만들던 중, close를 하지 않고, 연결을 유지한 채로 write함수로 EOF값 만을 보내서 대화 내용의 종결을 알리려고 했으나, 잘 작동하지 않았다.

read는 socket 이 close되지 않으면 EOF를 읽더라도 1을 반환한다. 따라서 연결을 유지하고 read/write를 하려면 읽은 값이 EOF인지를 체크해준다! 이거 알아내려고 이틀 밤 샜다. 젠장. 나만 병신인가. while (temp) { read(sockfd, &s, 1); if ( s == EOF) break; printf("%c",s); }

read 의 리턴값 - 기본적으로 실제로 읽은 바이트 수 만큼. 만일 파일 기술자가 socket 일 경우, 연결이 종료되어야 파일이 끝난 것으로 인식. 0을 리턴한… 이거 쓰고 보니 쪽팔리는데 당연한 거잖아. socket 형식의 파일일 경우는, 연결 종료 = 파일 끝인데…

….언제나 기본은 중요하다. 따라서 계속해서 연결을 유지한 채로(close 없이) read와 write로 내용을 주고 받을 경우, 데이터 자체에 대한 감시를 통해 제어해야 한다!

슬픈 포스팅 우분투 외부 접속 문제