Здравствуйте, TarasCo, Вы писали:
TC>1. Сокет у Вас создается с флагом WSA_FLAG_OVERLAPPED? ( если Вы используете вызов socket, то флаг установлен )
Именно так.
::WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
TC>2. Данные читаются с помощью WSARecv, куда передается 6ым параметром пустая структура OVERLAPPED и эта структура остается валидной до окончания операции? Если эта структура используется многократно, ее нужно обновлять ( обнулять ) перед каждым использованием.
Обнуления действительно не было. Добавил, проверю.
TC>3. Вы учитываете, что операция чтения может быть выполнена синхронно?
Поясните, пожалуйста.
TC>4. Мне честно говоря немного смущает вот это:
TC>(LPDWORD)&pSocket, &pOverlapped
TC>Если p — это префикс указателя, то разыменование указателя в данном случае IMHO не уместно?
С разыменованием думаю проблем нет. Указатель на объект "Сокет" отдаю так
BOOL bSuccess = ::PostQueuedCompletionStatus(hCompletionPort, 0, (DWORD)pSocket, &pOverlapBuff->m_ol);
//pOverlapBuff поинтер на объект такого вида;
//class OverlapBuff
//{
//public:
//.......
//.......
// OVERLAPPED m_ol;
// WSABUF m_wsabuf;
//.......
//.......
//};