Я сделал простую фиктивную клиентскую программу сервера/макета с помощью IOCP для некоторой цели тестирования/профилирования. (И я также хотел отметить, что я плохо знаком с асинхронным сетевым программированием),
Похоже на работы сервера хорошо с исходным клиентом, но когда фиктивный клиент пытается соединиться с сервером с функцией ConnectEx, Рабочий поток IOCP все еще заблокирован функцией GetQueuedCompletionStatus и никогда не возвращает результат, в то время как сервер преуспевает в том, чтобы принять соединение.
Каковы проблема и/или причина, и как я должен сделать для решения этой проблемы?
Даже после того, как вы свяжете принятый сокет с IOCP, ваш рабочий поток останется заблокированным на GetQueuedCompletionStatus до тех пор, пока вы не опубликуете событие завершения «разблокировки». События завершения для операции приема / записи не будут отправляться системой, если вы не «разблокируете» свой новый сокет. За подробностями обращайтесь к исходному коду Push Framework http://www.pushframework.com Это инфраструктура сетевых приложений C ++, использующая IOCP. Уловка «разблокировки» существует в классе «IOCPQueue».
Я думаю, вы ответите на свой вопрос своим комментарием.
Ваша последовательность событий неверна, вы говорите, что связываете, ConnectEx, ассоциируете с IOCP.
Вы должны выполнить привязку, связать сокет с IOCP и ЗАТЕМ вызвать ConnectEx.