accept(2) 실패시 처리 문제..
글쓴이: peccavi / 작성시간: 목, 2005/01/20 - 11:31오전
안녕하세요..
스티븐스 책에 있는 poll() 서버 구조로 간단한 테스트 서버를 작성하고 있습니다.
if( client[0].revents & POLLIN ) { connfd = accept(listenfd, ... , ...); // 여기서 connfd가 -1이 리턴됩니다. errno는 9이구요.. // System error: 9 = Bad file descriptor ... }
이렇게 accept를 실패했을경우, 이후 처리를 어떻게 해주어야 하나요..? 아무 처리 없이 바로 return 했더니 위와같은 에러가 무한 반복되네요..
그리고 어떤 상황일때 accept()가 -1, errno 9를 반환하는지도 좀 부탁드립니다..
Forums:
listenfd 로 bind를 안했거나 bind후 listen을 안했거나
listenfd 로 bind를 안했거나 bind후 listen을 안했거나 혹은 소켓이 아니겠지요. 하나씩 확인해보시면 나올겁니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
음
이벤트셋이 잘못됬거나 listen 소켓이 invalid descriptor 라던지..
둘중 하나인것 같네요.. 자세히 살펴보시고요..
에러처리는 일단 위와같은
에러가 나면 이벤트셋에서 listen 소켓을 제거해야겠죠..
invalid descriptor 를 가지고 계속 accept 를 할순 없으니..
안그러면 accept 가 성공하지 않았기 때문에 접속요청 이벤트
는 계속 감지 될겁니다.
댓글 달기