소켓 통신에서....
글쓴이: kn31232 / 작성시간: 금, 2003/05/16 - 3:08오후
서버에서 recv를 실행했을 경우 보통 recv는 block 모드로 실행이 됩니다.
하지만 연결된 클라이언트가 종료하였을 경우 non-block 모드로 바뀌는거 같은데....
block되지 않고 무한루프에 빠지는걸 보면 non-blocking 되는게 맞는거 같습니다...^^;
음...다시 recv를 blocking모드로 바꾸거나....혹은...이때 발생되는 signal에 관련하여 아시는분 계신가요...!?
recv한 데이터에 관하여 db에 저장하는 프로그램을 짜고있는데 클라이언트가 죽어버리는 순간 db에 엄청난 쓰레기들이 순식간에 싸여버리네요....무한 루프안에서...ㅡㅡ;;;
어떻게해야할까요~~~!? ㅜ.ㅡ
Forums:
아마 종료되면 리턴값이 0이 나올겁니다.넌블럭으로 바뀐게 아니고 fd
아마 종료되면 리턴값이 0이 나올겁니다.
넌블럭으로 바뀐게 아니고 fd값이 더이상 유효하지 않아서 그렇습니다.
accept를 다시 호출하시고 새로운 fd를 받아서 그값으로 다시 recv하셔야 합니다.
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
그건요..
클라이언트가 죽었을 경우에
recv는 non-blocking 모드로 바뀌는게 아니라
timeout이 걸려서 0을 리턴하는 것 같습니다.
결국 connection이 종료했음해도 불구하고
recv 관련 루틴을 바로 중지 하지
않아서..DB에 쓰레기 값이 쌓이는것 같군요..
connection 을 종료하고 다시 accept 하는 것이 좋을 듯
합니다.
감사합니당~! ^^
님들 덕분에 멋지게 해결했습니다~! 히히~ ^^
그럼 좋은 하루 보내세요~~~★
飛上
댓글 달기