Re[2]: IOCP: GetQueuedCompletionStatus и потоки
От: mLapo  
Дата: 09.08.07 08:58
Оценка:
Здравствуйте, 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;
//.......
//.......
//};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.