C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[42068] ERROR_IO_PENDING 상태에 대해 대처방법이?
넘초보 [mspower] 2044 읽음    2005-10-02 22:26
IOCP 를 이용한 서버를 만들고 있습니다.

작업 쓰레드를 4개로 했을경우이고요.

100개의 클라이언트가 접속되어 있는 상태일경우

, 하나의 작업 쓰레드에서 클라이언트로부터 데이터를 수신(GetQueuedCompletionStatus()를 통해)해서

루프를 통해 나머지 99개 클라이언트에게 이를 전송합니다.

이때 99개 중 첫번째 클라이언트의 통신 속도가 현저히 낮아서 (혹은 Pause 상태)

이전 패킷 전송 처리에 ERROR_IO_PENDING 이 발생하고 있는 상태일 경우

현재 패킷을 전송할수 없는 경우가 생길수 있겠죠.

현재 패킷을 전송하기 위해서 속도가 느린 클라이언트를 위해

IO_PENDING 상태가 풀릴때까지 대기하게 된다면, 나머지 98개의

클라이언트에 대한 전송이 늦어 질겁니다. IO_PENDING 상태일 경우

WriteFile() 로 데이터를 전송하면 ERROR_IO_PENDING 이 계속 발생하게

되는데, PENDING 상태일때 WriteFile() 로 전송을 시도한

데이터는 OS 에서 제공하는 소켓 전송 버퍼에

쌓이고 있는건지 궁금합니다. 그리고, 제공되는 버퍼의 크기는 한정되어

있을것이고, 또한 이럴경우에는 어떤 메시지(?) 가 오게 되는것인지요.


전송 부분만 따로 관리하는 쓰레드를 한개 둘경우에도 마찬가지(IO PENDING 상태)

증상이 발생할것이고, 모든 클라이언트에 대해 전송 쓰레드를 둘경우

IOCP 를 굳이 사용할 필요가 없겠죠.


님들은 이럴경우 어떻게 처리하고 계신지 궁금합니다.

+ -

관련 글 리스트
42068 ERROR_IO_PENDING 상태에 대해 대처방법이? 넘초보 2044 2005/10/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.