Вопрос по IOCP
От: Hayabusa Россия  
Дата: 16.07.13 15:19
Оценка:
Пытаюсь вникнуть в суть IOCP. Прочитал несколько основных статей в MSDN по этому поводу.
Сейчас пытаюсь написать простенький iocp-сервер на основе этой статьи — http://www.codeproject.com/Articles/13382/A-simple-application-using-I-O-Completion-Ports-an.
Там ниже есть код WorkerThread.

Не совсем понятна работа функций WSASend\WSARecv в этом контексте.
Там есть такой момент:


case OP_READ:
  pClientContext->IncrSentBytes(dwBytesTransfered);

  //Write operation was finished, see if all the data was sent.
  //Else post another write.
  if(pClientContext->GetSentBytes() < pClientContext->GetTotalBytes())
  {
    pClientContext->SetOpCode(OP_READ);

    ...

    //Overlapped send
    nBytesSent = WSASend(pClientContext->GetSocket(), p_wbuf, 1, &dwBytes, dwFlags, p_ol, NULL);


Т.е. по идее этот кейс подразумевает что мы сейчас должны читать, но по проверке я так понимаю не все данные были отосланы, и мы отсылаем оставшуюся часть буфера?

А есть вариант что бы GetQueuedCompletionStatus давал нам сигнал только тогда, когда данные были полностью отосланы\приняты? В чем прикол такой проверки\досылания данных?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.