소켓 비정상종료 처리...
글쓴이: 익명 사용자 / 작성시간: 목, 2002/05/02 - 4:07오후
안녕하세요..
서버 프로그램을 만들었는데여..
클라이언트가 비정상적으로 종료됐을때의 처리부분에서 막혔습니다.
select함수 이용해서 해봤는데..클라이언트가 종료됐을대 select에서 -1
을 리턴합니다.. 이게 맞나요?? 아닌거같은데..ㅡㅡaaa
다른 방법은 없나요?? 다른 사이트 q&a검색하다가 이런글 하나를 발견했는
데요...
다른 방법으로는 kernel로부터 정보를 취득하는 방법이 있습니다.
이것은 netstat를 작성하는 것으로 line은 약 100여 line정도면
구현 할 수 있습니다. 그러나 이것은 단점은 root권한으로 수행
되어야 한다는 겁니다.
ㅡㅡ 이것두 무슨말인지 잘 모르겟습니다..
좋은 방법 없을까요?? 부탁드립니다..
아!! 또한가지^^;;; 리눅스에서 open할 수 있는 소켓의 최대 갯수를 ㅈ제
맘대로 바꿀수 있을까요?? 어떻게 해야하는지..^^
좋은하루 되세요~~
Forums:
Re: 소켓 비정상종료 처리...
select에서 -1로 나오는 경우는 상대프로세스가 죽거나 하는 문제가 아닙
니다.
대표적으로는
1. select에 들어간 file descriptor가 잘못되었거나,
2. 신호를 받았다.
3. 0 <= t_sec < 10^8
0 <= t_usec < 10^6
(select를 I/O의 입력을 기다리는 용도로 사용할때입니다
4. EINVAL
File descriptors must not refer to a STREAM or multiplexer
linked downstream from a multiplexer.
(이건 뭔지 몰라유...함 알려주시길...)
등등...일종의 시스템 에러죠.
그럼 상대 프로세스가 죽으면? select에서 read file descriptor가 on 되
면서...read를 해보면 아무런 데이타가 없습니다.
이게 상대프로세스가 죽었다는 표시죠.
그리고 한 프로세스에서 열수 있는 최대의 file descriptor의 크기는 어떻
게 바꿀까요?
방법은 관련 변수를 바꾸고 Kernal을 재 컴파일하면 가능할 것 같군요.
댓글 달기