Вопрос по 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 давал нам сигнал только тогда, когда данные были полностью отосланы\приняты? В чем прикол такой проверки\досылания данных?
Re: Вопрос по IOCP
От: Mиxa Украина  
Дата: 16.07.13 18:59
Оценка: 3 (1)
Здравствуйте, Hayabusa, Вы писали:

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

H>А есть вариант что бы GetQueuedCompletionStatus давал нам сигнал только тогда, когда данные были полностью отосланы\приняты? В чем прикол такой проверки\досылания данных?

На практике я ни разу не видел, чтобы WSASend завершилась успешно, отослав не все данные. Даже в синтетических тестах. Но все же такой вариант теоретически возможен, увы, его надо учитывать.
Re[2]: Вопрос по IOCP
От: Hayabusa Россия  
Дата: 16.07.13 19:06
Оценка:
Здравствуйте, Mиxa, Вы писали:

M>На практике я ни разу не видел, чтобы WSASend завершилась успешно, отослав не все данные. Даже в синтетических тестах. Но все же такой вариант теоретически возможен, увы, его надо учитывать.


Я понял.. Благодарю
Re[2]: Вопрос по IOCP
От: avp_  
Дата: 17.07.13 15:19
Оценка:
Mиxa wrote:

> На практике я ни разу не видел, чтобы WSASend завершилась успешно,

> отослав не все данные. Даже в синтетических тестах. Но все же такой
> вариант теоретически возможен, увы, его надо учитывать.

Было неоднократно в кривой сети. По какой то причине приёмник не
принимал данные, и одни копились в исходящем буфере. В какой то момент
send записывал не всё, а потом и просто 0.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.