소켓 프로그래밍, read시에 ENOMSG 보신 분 안계신가요?
글쓴이: uamyd5279 / 작성시간: 일, 2011/02/20 - 12:15오전
안녕하세요. 지금도 여기저기서 밤샘을 준비하시는 한국의 개발자 분들...
오랜 만에 사이트를 이용해 봅니다.
거두절미하고...
SunOS 에서 소켓 프로그램을 작성한 것이 있는데,
client 와 연결이 이루어진 후에,
서버측에서 client 의 데이타를 read 하는 경우, 실제 소스는 아래와 같습니다.
len = read (sfd, buf,1); if( len != 1 ){ log("fail read 1th byte : %s", strerror(errno)); return -1; }
이 때, 에러 메세지가 다음과 같이 뿌려집니다.
fail read 1th byte : No message of desired type
그런데, 저 메세지(No message...) 를 찾아보니 ENOMSG ( 35 ) 에 해당하는데,
read 함수 어디에도 해당 에러 메세지가 정의되어있지 않아서요..
client 단에서 closing 했을 때 저런 메세지가 뿌려지나 해서 더미 프로그램을 만들어 돌려서 끊어봤더니 84번이 떨어지더군요.
혹시, 저런 경우를 보신 적 있으신 분 안계신가요 ㅜㅡ
Forums:
errno on solaris는 기본적으론,
errno on solaris는 기본적으론, thread-safe하지 않다고 합니다.
그래서 -D_REENTRANT 를 주어서 컴파일을 하면, thread-safe한 errno가 쓰여진다고 하네요.
제가 solaris가 없으니 확인은 못하겠지만, 구글에서 "errno thread-safe"로 검색해보시면 많은 글에서 그렇게 말합니다.
http://fixunix.com/unix/84275-errno-thread-safe.html
http://stackoverflow.com/questions/1694164/is-errno-thread-safe
http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2007-05/msg00286.html
댓글 달기