소켓 프로그래밍 중에서...
글쓴이: moonzoo / 작성시간: 월, 2003/06/02 - 6:02오후
man recv 해보았더니
댜음과 같은 것이 있었습니다.
[ECONNRESET]
A connection was forcibly closed by a peer.
근데 막상 Server에서 recv중에
Client를 강제로(ctrl+c) 로 죽였더니..
Server의 recv에서는 errno가 발생치 않고..
0을 리턴하는 군요..
recv중에 ECONNRESET은 언제 일어 나는건가여?
-------- 또 한가지..
Server에서 select로 client와 연결된 socket fd를 read set에
걸어놓고 기다리는데 Client가 죽어도
select에서 -1, 또는 0을 리턴하지 않고 걍 넘어가네여(양수 리턴)
원래 그런건가여?
제가 보통 poll을 쓰는데..poll에서는 POLLHUP이 발생하거든여..
암튼 소켓 프로그래밍 정리차 다시 한번 구성해 보고 있는데..
헤메고 있는 듯--;
Forums:
[quote]recv중에 ECONNRESET은 언제 일어 나는건가여? [
다음 스레드를 참고하세요.( 스레드 내의 read와 recv의 return 값은 동일합니다)
http://bbs.kldp.org/viewtopic.php?t=9276&highlight=ECONNRESET
poll도 양수 리턴하지 않나요?
양수 리턴이고 revent에 POLLHUP과 POLLIN이 둘 다 set되는것으로 알고 있습니다.
select의 경우에는 HUP과 같은 상황을 체크하도록 되어있지 않기 때문에 read set에 set 되는것으로 알고 있습니다.
잘못된 부분이 있다면 지적해 주시길...
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
select의 리턴값은
음수는, select중에 에러가 발생한 것이고
(주로 유효하지 않은 fd를 select에 걸었을때 나옵니다.)
0은 타임아웃
그리고 1이상은 발생한 이벤트의 수입니다.
컨넥션 종료 체크는 보통 read에서 0을 리턴으로 확인하니까
select 입장에선 close로 read fd_set에서 이벤트가
생긴것으로 보겠지요..
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
감사..
답변 감사드립니다.
이제 좀 알꺼 같습니다 ^^
이번 기회에 좀 제대로 정리를 해야 겠네요.
댓글 달기