CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): doriya (도리야)
날 짜 (Date): 1995년08월09일(수) 16시26분13초 KDT
제 목(Title): Re] connect Error


질문에 대한 정보가 적어 정확히 대답하기가 어렵군요
사실 통신 프로그램을 짜다가 에러가 났을때 그 원인은 단순히
에러메시지만을 보여주고 찾으라하면 찾기가 어렵죠

분명한 것은 socket에 대한 이용은 루트가 아니더라도 
얼마든지 사용가능합니다. 유닉스에서는 socket descriptor와 
file descriptor를 같이 사용합니다. socket descriptor를 
프린트해보면 이것이 file descriptor table의 인덱스란걸
알 수 있습니다. 일반 유저가 디렉토리에 write 퍼미션만 있으면
화일을 만들 수 있듯이 socket도 마찬가지죠.
unix stream socket(IPC)인 경우 socket용 가짜 화일이 만들어지는데
이 화일이 쓰이는 디렉토리에 퍼미션이 있으면 일반유저도 얼마든지
가능합니다. 마치 화일을 오픈,또는 만들 수 있듯이...

Connection refused가 발생한것은 즉 errno.h의 에러넘버가 hp인 
경우 239번인데 대개 ㅅ다음과 같은 경우로 생각됩니다.
저도 이런 에러메시지를 만난적이 있죠.

우선 서버쪽 listen queue가 너무 작게 잡혀 여러 클라이언트 프로그램이
connect하다가 서버가 이를 다 소화해내지 못하고 queue에 쌓아뚜는데
이 리미트가 넘어서 클라이언트의 요구를 거부하는 거죠.

다음은 서버쪽 socket를 잘못오픈한 경우입니다. 즉 파라메터가 
잘못되었던지, 또는 너무 많은 화일이나 소켓이 열려서 , 즉
화일디스크립터 테이블이 꽉 차서 더이상 오픈할 수 없는 경우죠.
이런 경우 는 concurrent server에서 accept후 fork하고 처리 후
socket를 close하지 않아서 발생합니다.
실제 프로그램에서 이런 실수는 너무 많이 발생합니다.
그래서 특히 주의해야죠, 따라서 사용하지 않는 화일이나 소켓은
즉시 닫아줘야 합니다. 이는 화일디스크립터 테이블을 
줄일 뿐만 아니라 시스템 자원인 화일 테이블의 크기를 줄이는
효과도 있습니다.

아마도 진설님의 에러메시지도 위에 설명한 이유로 발생한거 
같습니다. 제가 소스를 보지 못해서 장담은 못하겠군요

어쨌든 제가 connection refused되어서 찾아본 결과
위의 경우였습니다. 이 원인을 해결하니깐 
그런 메시지가 나오지 않더군요....
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.