[질문] 소켓프로그래밍 접속문제
글쓴이: ringlove00 / 작성시간: 금, 2003/04/04 - 5:33오후
보통 서버가 on 상태에서 클라이언트가 on 되면 접속이 됩니다.
그런데 반대로 클라이언트가 on된 상태에서 서버가 on되면 접속이 되지 않습니다.
서버에는 KEEPALIVE 옵션을 잡아주고 클라이언트에는 CONNECT_TIMEOUT으로 접속이 안되면 for문으로 루프를 돌려 재접속하게 했습니다.
이경우 왜 이런 현상이 발생하고 해결방법은 무엇입니까
도움부탁드립니다.
Forums:
loop for retry : [code:1]while&#
loop for retry :
- I've forgot "break" ;;;
당연하지요...
서버가 먼저 listen 중 일때
클라이언트가 connect() 해야 서버에서 accept() 해주는거 당연합니다.
클라이언트쪽 프로그램은 특히 조심히 짜야 합니다.
접속실패나 소켓끊김에 대해 재접속 하게 되는데 sleep(1) 은 너무 짧습니다. 접속실패시 계속 재접속을 하게 되면 서버에 심각한 영항을 줄수도 있습니다. 하다못해 로그를 엄청나게 많이 남기게 될수도 있겠지요.
저는 서버쪽 프로그램과 클라이언트 소켓을 모두 짜는데 클라이언트의 경우 프로세스 시작하면서 반드시 sleep(5) 정도 줍니다. 또 connect() 전에 alarm(30) 을 걸고 SIGALRM에 대해 재접속(재실행)을 하게 합니다.
접속실패시엔 반드시 sleep 10초 이상합니다.
sleep이 없으면 최악의 경우에 서버나 네트웍에 엄청난 부하를 줄수 있습니다.
내 자식들도 나처럼 !!
댓글 달기