Я пишу небольшой сервер-клиент с использованием порта завершения ввода-вывода.
Я успешно подключил сервер и клиент через AcceptEx через мой порт завершения.После подключения клиента клиентский сокет связывается с портом завершения, и вызывается перекрывающийся вызов WSARecv для этого сокета.
Все работает нормально, пока я не закрою клиентскую тестовую программу.GetQueuedCompletionStatus()
возвращает FALSE
и GetLastError
возвращает
ERROR_NETNAME_DELETED
, что имеет смысл для меня (после того, как я прочитал описание в MSDN).
Но моя проблема в том, что я думал, что вызов GetQueuedCompletionStatus
вернет мне пакет, указывающий на сбой из-за закрытия сокета, потому что WSARecv
вернет соответствующее возвращаемое значение.Так как это не тот случай, я не знаю, какой сокет клиента вызвал ошибку, и я не могу действовать так, как мне нужно (освобождение структур, очистка для этого конкретного соединения и т. Д.) ...
Любые предложения покак решить эту проблему, или подсказки?
Спасибо:)
РЕДАКТИРОВАТЬ: http://codepad.org/WeYINasO <- код ответственен ... "ошибка" происходит в начале первых функцийцикл while (вызов <code>GetCompletionStatus(), который является только оболочкой для GetQueuedCompletionStatus (), работает нормально в других случаях) [Разместил это там, потому что здесь он выглядит дерьмово и грязно]