C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[5765] IOCP... ㅠ.ㅠ
정재필 [] 1954 읽음    2002-09-17 05:23
음...
IOCP 써보신 분들 계시면...
조언좀 부탁드립니다. ㅡㅡ;
(질답 게시판에 올리긴 좀 그런 내용이라 여기에 올립니다. ㅡㅡ;)

우선... IOCP를 이용한 서버 라이브러리를 빌더에 있는 기본소켓(TServerSocket)과 거의 똑같이
만드는 데는 성공했습니다.
그런데... 문제가... 바로 버퍼링인데요...

하나의 send가 완료되기 전에 계속해서 send를 요청할 경우가 있을 수 있습니다.
그래서 생각한게... send용 큐를 만드는건데...
(send 완료 이벤트가 발생하면 send 큐를 찾아보고, 다시 전송 요청하고...
큐가 완전히 비워질 때까지 이걸 반복하는...)

일단 구조는 이렇게 잡혔는데...
구현을 하려니 생각해봐야할 게 상당히 많더군요 ^^

일단... IO 컨텍스트는...

class CIoContext : public CVirtualMemory {
    public:
        WSAOVERLAPPED Overlapped;
        WSABUF wsaBuffer;
        char szBuffer[1024 * 5];

        unsigned int unBytesTransferred;      // Send/Recv 바이트 수
        unsigned int unTotalBytes;

    public:
        CIoContext(void);
        ~CIoContext(void);
};

이렇게 정의했습니다. CVirtualMemory는 new하고 delete를 VirtualAlloc, VirtualFree로
재정의한 것일뿐 별 의미는 없구요.

제일 간단하게는 Send용 CIoContext를 list로 만들어서... 관리하는 것이고...
또 다른 방법은 Send용 CIoContext는 하나이고, szBuffer를 가변으로 늘였다 줄였다
하는 방법... 등등 방법은 꽤 많을 것 같습니다.

그러나... IOCP 서버 엔진이니... 조그만 부분이라도... 서버의 성능에 미치는 영향을
최소화 하고 싶습니다. Send IO Context를 어찌 관리하는게 맞는건지...ㅠ.ㅠ

PS. 완성해보고 쓸만하다고 생각되면... 자료실에 올리겠습니다. ^^
이경석 [pmoffice]   2002-09-17 09:04 X
CVirtualMemory 라 이거 클래스 명칭이 MS 냄새를 품기는 데요... 쩝. ^-^
정재필 [zgdr7th]   2002-09-17 12:42 X
아... 빌더에서 문제없이 컴파일 잘 됩니다. ^^ API만 썼거든요... ^^
정재필 [zgdr7th]   2002-09-17 12:57 X
클래스 명칭에 C가 붙은건... 그냥 제 습관이구요 ㅠ.ㅠ (저 MFC는 잘 쓰지도 못 하고, 엄청 싫어한답니다. ^^)

+ -

관련 글 리스트
5765 IOCP... ㅠ.ㅠ 정재필 1954 2002/09/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.