2016-06-30 13 views
0

ich nicht über diese klar habe ich irgendwo gelesen, dass GetQueuedCompletionStatusWSARecv und WSASend Ergebnisse in der Reihenfolge angezeigt werden sie erstellt wurden, ist so hier meine Frage:
In einem Server initialisiert Wenn CreateIoCompletionPort mit NumberOfConcurrentThreads = 1 dann Öffnen Sie eine Verbindung mit einem Client und der Server ruft zuerst WSARecv dann WSASend, aber der Client sendet nie etwas. Auf dem Server wird GetQueuedCompletionStatus nie das Ergebnis von WSASend zurückgeben, weil ein Ergebnis von WSARecv zuerst passieren muss?Verständnis IO Completion Ports

+0

in welcher Frage überhaupt und wie IOCP hier verwandt? Sie müssen WSASend erst nach Abschluss von WSARecv aufrufen? oder wie/welche Logik? – RbMm

+0

* Ich habe irgendwo gelesen, dass GetQueuedCompletionStatus WSARecv- und WSASend-Ergebnisse in der Reihenfolge zurückgibt, in der sie erstellt wurden * - nein. Die Ergebnisse werden in der Reihenfolge zurückgegeben, in der die E/A abgeschlossen sind. –

+1

Ich stimme ab, diese Frage als Off-Topic zu schließen, weil sie auf einer falschen Annahme beruht. –

Antwort

1

Wenn der IO-Vorgang abgeschlossen ist (mit Erfolg oder anfänglich zurück anstehend) auf Datei mit gebundenem IOCP - Paket in Warteschlange an IOCP - und GetQueuedCompletionStatus hat dieses Paket erhalten. Wenn Sie also 2 io-Vorgänge starten - zuerst WSARecv und WSASend und WSASend -, wird GetQueuedCompletionStatus zuerst mit dem Status WSASend zurückgegeben, auch wenn WSARecv nicht abgeschlossen wird. so GetQueuedCompletionStatus nur nach einigen IO-Operation abgeschlossen in der Datei mit dieser IOCP