Zitat von
Apollonius:
WSAWaitForMultipleEvents gibt dir nicht das auslösende Event-
Handle zurück, sondern den Index. Wenn du also zwei Listen hast, in der einen die Events, in der anderen die Sockets, kannst du die erste an WSAWaitForMultipleEvents übergeben, welches dir den Index des signalisierten Events zurückgibt. Diesen Index kannst du nun verwenden, um mit der zweiten Liste den Socket anzusprechen.
Das ist ja eine simple Lösung
Im
MSDN Beispiel ist es ganz ähnlich. Das ganze wurde aber noch mit WSAGetOverlappedResult verknüpft... leider versteh ich da den Sinn nicht. Brauch ich das auch?
Zitat von
Apollonius:
Bezüglich WSAEnumNetworkEvents hast du grundsätzlich Recht, aber Select sagt dir nichts zu FD_CLOSE, FD_ACCEPT und einigen anderen Ereignissen.
Auf ein Accept könnte man doch schließen wenn man gerade mit dem Listen-Socket arbeitet und bei einem Close liefert recv laut
MSDN den Fehler WSAECONNRESET. Evtl. könnte man ja auch nochmal WSAEnumNetworkEvents für das entsprechnede Socket aufrufen... dann spart man sich auch die Schleife.
So wie ich das nun sehe haben sich da zwei Ansätze rauskistallisiert (Danke dafür erstmal!). Ist eine der Lösungen der anderen aus bestimmten Gründen vorzuziehen?