프로그래밍/MFC/WIN32

IOCP를 이용한 OVERLAPPED 사용시 ErrorCode(6) 관련

nanze 2022. 4. 6. 11:47
반응형

IOCP OVERLAPPED사용할 경우 랜덤적으로 WSARecv 또는 WSASend 동작시 Error Code 6 일 발생하는 경우가 있다. 

이것은 Overlapped 구조체의 hEvent 변수를 초기화하지 않고 사용해서 발생하는 것으로 해당 변수를 NULL 로 초기화해서 사용할 경우 발생하지 않는다. 

아래의 경우에는 내가 사용했던 경우이다. 나중에 혹시 다시 발생하면 참고할 수 있도록 하자. 

class CROverlapped : public OVERLAPPED, public CRObject
{
public:
	E_TYPE_OVERLLAPED eType;
	std::shared_ptr< CClientInfo> m_ClntInfo;

	CROverlapped() { m_ClntInfo = nullptr; 
						hEvent = NULL; 
	}

	CSocketHandle* m_Socket;
};

 위 클래스는 OVERLAPPED 를 상속받았고 내부에서 hEvent 변수를 초기화하고 있는 것을 볼 수 있다. 

 

반응형