|
IOCP 를 이용한 통신을 하고 있습니다.
제가 궁금한것은 서버에서 송신시에 ERROR_IO_PENDING 상태입니다.
아래처럼 데이터를 보낼때
ret = ::WriteFile((HANDLE)socketValue, packet, packetSize, &wBytes, (LPOVERLAPPED)&ol);
ERROR_IO_PENDING 상태라면, 보내고자 하는 packet 이 이미 소켓버퍼에 들어간건지,
아니면, ERROR_IO_PENDING 상태 해제후에 다시 packet 을 WriteFile 로 넣어주어야 하는것인지..
ERROR_IO_PENDING 시에 wBytes(전송된바이트) 를 보면 항상 0 으로 되어 있더군요.
wBytes 의 값이 소켓 버퍼에 넣어진 값인지, 아니면 클라이언트로 전송이 완료된 값인질 모르겠네요..
소켓버퍼에 넣이진 값이라면, ERROR_IO_PENDING 해제후에 나머지 값을 넣어주면 될거라고 보는데,
항상 이 값이 ERROR_IO_PENDING시에는 0 이라서요.....
GetOverlappedResult() 함수로 ERROR_IO_PENDING 해제를 기다렸다면, 위에서 보내고자 하는
packet 데이터가 전송된 것인지, 만약 그렇다면 GetOverlappedResult() 으로 ERROR_IO_PENDING 으로
헤제를 기다리지 않고 바로 다음 데이터를
ret = ::WriteFile((HANDLE)socketValue, packet2, packet2Size, &wBytes, (LPOVERLAPPED)&ol);
와 같이 계속 보낼경우에 발생할 수 있는 문제는 어떤게 있을까요?
ReadFile 의 경우 ERROR_IO_PENDING 시에, 그냥 기다려면 클라이언트로부터 데이터가 올테고,
이때 다시 읽어들이면 될텐데, 음...
도움 부탁드립니다.....
|