select하고 있는 socket의 close 처리..
글쓴이: psjcap / 작성시간: 월, 2004/03/15 - 8:46오후
한 ip에서 한연결만 허용하는 프로그램입니다..
select로 여러 소켓 동시에 recv 처리를 합니다..
그런데 이미 연결된 ip로 다른 connection이 들어올 경우..
기존에 connection은 끊어 버리고.. 새로운 connection으로 통신을 합니다..
근데 select로 block되어 있는 상태에서 close를 하면..
select는 0보다 작은 값을 리턴하지만.. errno가 0이 나오는군요..ㅠㅠ
pipe를 하나씩 select에 두는 방법도 생각해보았는데..
thread마다 file descriptor를 2개씩 먹다보니.. 이것도 문제더군요..
select timeout 값을 주도록 하는 방법 외에 다른 방법은 없을까요..??
Forums:
별 문제가 없을것 같습니다.
어차피 select 로 기다리는 녀석중에 listen 하는 fd도 있겠죠?
새로운 접속이 오면 그 녀석을 받고 ip 알아낸다음에 기존의 접속이있으면 끊는 루틴만 넣으면 됩니다.
보통 listener socket 을 맨 앞에 두니까 이녀석 먼저 검사하고 그리고 fdset 새로 갱신하러 루프 continue 시키고 돌면 되겠죠. timeout 없어도 처리가능합니다.
========================================
* The truth will set you free.
close()만 하시고 FD_CLR()은 안하신게 아닌가요?
close()만 하시고 FD_CLR()은 안하신게 아닌가요?
댓글 달기