소켓 프로그래밍을 할 때 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로 내용을 주고 받을 경우, 데이터 자체에 대한 감시를 통해 제어해야 한다!

슬픈 포스팅 우분투 외부 접속 문제
comments powered by Disqus