지난 며칠 동안 나는 직면하고있는 내 문제 중 하나를 해결하는 방법에 대해 생각해 봤지만 주제를 연구하려고 시도했지만 실제로 무엇을 할 수 있는지 알지 못했습니다. .동일한 컨테이너에있는 IOCP 다중 소켓 완성 포트
동일한 소켓에 동일한 소켓을 가진 두 개의 소켓이 있습니다. 문제는 둘 다 서로 다른 프로토콜을 사용한다는 것입니다. 어떤 소켓이 트리거되는지 알 수있는 방법이 있습니까? 그들의라는 game_socket 및 client_socket
예제 코드는 ...
while (true) {
error = GetQueuedCompletionStatus(CompletionPort, &BytesTransfered, (PULONG_PTR)&Key, &lpOverlapped, 0);
srvc = CONTAINING_RECORD (lpOverlapped, client , ol);
if (error == TRUE) {
cout << endl << "SOCKET: [" << srvc->client_socket << "] TRIGGERED - WORKER THREAD" << endl;
cout << endl << "BytesTransfered: [" << BytesTransfered << "]" << endl;
if (srvc->game_client triggered) {
// .. this code
} else {
// .. this code
}
어떤 아이디어 뭔가 같은 것 또는 도움을 주시면 감사하겠습니다 :) 당신이 사용하고 중첩 된 확장 구조가 이상적으로 적합하다
난 그 두려워했다. WSAEnumNetworkEvents를 사용하여 WSAEventSelect와 같은 여러 가지 작업을 시도했지만 아무 것도 작동하지 않았습니다. : – User
당신이 생각하는 것만 큼 나쁘지 않을 수도 있습니다. 여러 소켓에 동일한 IOCP를 문제없이 사용할 수 있습니다. 각 IO 요청이 하나의 OVERLAPPED 구조와 연결되어 있는지 확인하십시오. 소켓은 어떤 객체 인스턴스에서 관리되고 있으며 둘 다 IOCP에서 잠재적으로 기다리고있는 경우 각 객체는 객체에 링크 된 확장 된 OVERLAPPED 구조를 가질 것입니다 * 및 * 어떤 소켓이 해당 OVERLAPPED 데이터로 표시되는 IO 요청에 참여하고 있는지 식별해야합니다 나는 그것을 이해할 수 있기를 바란다. 당신은 이것을 할 수있다, 조금 더 생각해라. – WhozCraig
나는 그런 것들을해야만 할 것이라고 생각했다! 답장을 보내 주셔서 감사 드리며, 나는 몇몇 작은 테스트 서버 . :) – User