서버 소켓에서 응답이 없는경우.
글쓴이: antz / 작성시간: 월, 2003/10/13 - 7:11오후
코드의 일부분입니다.
... /* 클라이언트로부터의 접속을 기다린다. */ if (listen(__sockServer, 5) == -1){ CommonLog("ERROR : listen()\n"); return 0; } while(TRUE) { nLength = sizeof(cli_addr); sockClient = accept(__sockServer, (struct sockaddr *) &cli_addr, &nLength); sprintf(logMsg, "Count = %04d\n", n_cnt++); CommonLog(logMsg); close(sockClient); continue; } ...
클라이언트 프로그램을
초당 30 User thread로 돌리면,
힘들게 돌다가...
20초 이상 대답이 없는게 가끔 발생합니다.
응답을 20초안에 하려면 어떻게 해야할까요???
감사합니다.
Forums:
1. listen()의 backlog가 너무 작습니다. man liste
1. listen()의 backlog가 너무 작습니다. man listen(2) 을 잘 읽어보세요.
2. 만일 Client의 동시접속이 많을 경우, Iterative Server 구조는 적합하지 않습니다. accept() 후 connected socket에 대하여 처리를 해주는 thread를 생성하든지, select/poll 등으로 I/O Multiplexing을 해주면 쉽게 해결할 수 있습니다. man select(2), man poll(2)...
1. listen 함수의 backlog 값을 책의 예제보고 사용하셨나요?
1. listen 함수의 backlog 값을 책의 예제보고 사용하셨나요?
요즘은 시스템이 좋아져서 더 크게 하는 것이 동시접속에 효율적입니다.
2. 효율성의 문제겠지요.
그리고, select, poll를 사용한 I/O Multiplexing... 효율은 좋지만 프로그래밍 하기가
쉽지 않지요.
The Future !!!
댓글 달기