Design Problem mit Sockets im Async Mode
-
Hi ich möchte für ein Online Game einen Server schreiben.
Soweit so gut dafür erstelle ich einen Server Socket mit Port 80 für den http verkehr und shcalte diesen in den Asynconmodus.
Jetzt habe ich zwei Probleme.
1. Ich möchte eine Liste haben aller Rechner die imoment auf die Seite zugreiffen. Dafür habe ich mir ausgedacht dass ich einfach eine Klasse mache in der die Clientsockets und ein Paar infos zur Clienten stehen.
Dafür habe ich volgende Konstuktion in meiner Callback:
... case (WM_USER + 2): { switch(WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: { int len = sizeof(sockaddr); _IN Adr; SOCKET Client = accept(g_ServerSocket, (LPSOCKADDR)&Adr, &len); CClient temp = new CClient(Client, Adr, &ClientList); } break; case FD_READ: { SOCKET Client = SOCKET(wParam); std::string sMessage = GetReadMessage(Client); /// Mach was aus den Daten .... sMessage = CreateSendMessage(Client, sFile); } break; case FD_CLOSE: { SOCKET Client = SOCKET(wParam); ClientList.erase(...); } break; ...Wie bekomme ich jetzt in dem FD_READ / FD_CLOSE Teil den Zeiger auf meine CCLient Klasse? kann ich irgentwei mit Winsock da ein void* übergeben?
Es gäbe ja die möglichkeit die liste einfach zu durchsuchen aber das sollte ja gerade bei vielen zugriffen ewig dauer (ich möchte das später viele leute drauf zugreiffen können und habe nur nen scheissrechner auf dem das laufen kann).2. Irgentwei schickt der IE keine nachricht das die verbindung geschlossen werden soll wenn er beendet wird.
Da ich in der HTTP-Header Connection: Keep-Alive angebe sollte er das eigentlich machen wenn er keine weiteren daten benötig oder wennn er beendet wir leider erhalte ich nix von ihm

Ich würde mich riesig freuen wenn mir jemad helfen könnte.