버그 해결을 위한 모든 질문을 던져
0 votes
226 views
struct stOverlappedEx
{
    WSAOVERLAPPED m_wsaOverlapped;        //Overlapped I/O구조체
    SOCKET        m_socketClient;                  //클라이언트 소켓
    WSABUF        m_wsaBuf;                         //Overlapped I/O작업 버퍼
    char        m_szBuf[ MAX_SOCKBUF ];       //데이터 버퍼
    IOOperation m_eOperation;                   //작업 동작 종류
};    

보통 위와 같은식으로 overlapped, socket, wsabuf, buffer, IO연산종류(send,recv,accept,connect 등) 패킹된 구조체를 보내던데 그냥 각각 개별로 쓸순 없는걸까요? 책에서도 갑자기 위와같은 구조체가 나오길래 그 사상(?)이 이해가 안가서 여쭤봅니다
asked (2 point) , 226 views

2 answers

0 votes
IOCP 에서 구조체를 전달하는이유가 무엇이냐보다 C에서 왜 구조체를 쓰냐라는 질문이네요.

부모님 심부름으로 마트에서 장을 본다 상상해보세요. 물건을 2개 정도 사면 손으로 들고 오면 되겠지만, 5개 정도 사면 비닐봉지에 담아와야겠죠.

왜 꼭 비닐봉지에 담아야 하냐구요? 물론 손으로 들고올 수도 있습니다. 몸이 힘들 뿐...

부모님께 전달 드릴때도 비닐봉지만 드리면 되는데 손으로 오면 5개를 각각 건네드려야겠죠.

 

구조체로 데이터를 넘기는건 C언어나 Windows 의 사상이나 철학 때문이 아니라 효율적이니까 그렇게 하는겁니다.
answered (4 point) 1 신고
+1 vote
overlapped 구조체의 확장 버전이군요.

IOCP를 사용하면 GetQueuedCompleteStatus에서 완료통지를 받게 될 것인데요.

완료통지를 받는 상황에서 추가적으로 정보를 전달하고 싶은 경우...

overlapped 구조체를 확장해서 질문하신 것 처럼 사용합니다.

 

구조체를 아래 처럼 사용하기도 합니다.

struct stOverlappedEx : public WSAOVERLAPPED

 

구조체를 저렇게 사용하는 이유는 GetQueuedCompleteStatus를 받은 상태에서

더 많은 정보를 한번에 전달하고 싶어서 그렇습니다.

만약에 GetQueuedCompleteStatus 받은 이후에 list를 순회해서 m_socketClient, m_wsaBuf ,m_szBuf, IOOperation m_eOperation에 대한 정보를 찾을 수 있지만...

한번에 GQCS를 통해서 찾는게 효율적이여서 사용하는 방법입니다.
answered (12 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

507 질문
655 answers
643 댓글
118,131 users