|
제가 IOCP 개발을 하고 있는데요
문제가 있습니다
일단 오버랩을 맴버로 가지고 있는 클래스(buffer) 를 만들고
클라이언트 인포 클래스를 만들어서 맴버로 buffer * 를 가지고 있다가
클라이언트가 accept가 되면 buffer 클래스에 오버랩을 연결했습니다
문제는 보내기는 잘되는데 받는 쪽에서 한번받고 나서 두번째 부터는 받아지지 않는군요
분명 WorkerThread 내에서 while문 안에 GetQueuedCompletionStatus 함수로 대기하고 있는데요
보내기 받기 데이터는 잘 받아지는데 받는쪽에서 1번 이상 GetQueuedCompletionStatus 에서 캣취가 안되네요
그래서 해결하기 위해 WSARecv()를 다 받고나서
UINT32 nRetVal = WSARecv(pClientInfo->m_Socket,
pOverlapBuff->GetWSARecvBuffer(),
1,
&dwIoSize,
&ulFlags,
&pOverlapBuff->m_overLapp,
NULL);
위와같이 한번 등록을 해봤습니다 그랬더니 받는 부분에서 1(0), 2(X), 3(0) 이렇게 됐다가 안됐다가 합니다
해서 WSARecv()를 다 받고나서 PostQueuedCompletionStatus 로 해서 등록을 해봤습니다
그랬더니 연속적으로 다 받아지네요 근데 문제는 제가 서버에서 데이터를 보내고 리스판스를 받는 부분에서
마찬가지로 한번만 받아지고 다음부터는 안받아지네요
혹 WSARecv()를 다 받고나서 무슨 다른 동작을 해야 하나요???
GetQueuedCompletionStatus 완료포트라고 하더만 완료가 되도 동작을 안하네요
고수님들 꼭 답변좀 부탁드립니다
|