過去幾天我一直在考慮如何解決我面臨的一個問題,並且我試圖研究這個主題,但並不知道我能做什麼。IOCP在同一容器中的多個套接字完成端口
我在同一個結構中有兩個套接字,它們都具有相同的completionport。問題是,他們都使用不同的協議。有沒有辦法,我可以找出哪個套接字被觸發?他們叫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請求都與一個IO請求相關聯,並且只有一個OVERLAPPED結構。套接字在某個對象實例中進行管理,並且它們都可能在IOCP上等待,那麼每個套接字都可能具有一個擴展的OVERLAPPED結構,該結構鏈接到該對象並且*標識哪個套接字參與該OVERLAPPED數據表示的IO請求。我希望這是有道理的,你可以做到這一點,再想一想吧。 – WhozCraig
我有點想到我必須這樣做!謝謝你的回覆,我一定會用一些小的測試服務器。:) – User