Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

FD_CLOSE и оставшиеся в буфере данные.   Найти похожие ветки 

 
atruhin ©   (2005-03-22 08:15) [0]

Создаю событие FD_READ or FD_CLOSE, ожидаю, обробатываю. Столкнулся с тем, что если сервер отпровляет данные и закрывает сокет, я получаю оба события, и на FD_CLOSE приходиться определять не остались ли еще данные во входном буфере IOCtlSocket и вычитывать их перед завершением работы потока.
Как это сделать лучше?
  WSAEventSelect(InternalSocket, Hs[1], FD_READ or FD_CLOSE); //    WaitResult := WaitForMultipleObjects(EvCount, @Hs[0], false,  AliveTimeout);
  case WaitResult of
   WAIT_OBJECT_0 + 1 : begin

 WSAEnumNetworkEvents(ExternalSocket, Hs[2], @NetworkEvents);
  if NetworkEvents.lNetworkEvents and FD_Read>0 then
   if NetworkEvents.iErrorCode[FD_Read_Bit]=0 then begin //             DataRead(ExternalSocket, ExternalData, ExternalLen);
   end else break;
  if NetworkEvents.lNetworkEvents and FD_Close>0 then begin
      IOCtlSocket(ExternalSocket, FIONRead, arg);
      while arg > 0 do begin
         DataRead(ExternalSocket, ExternalData, ExternalLen);
         IOCtlSocket(ExternalSocket, FIONRead, arg);
      end;
      break;
  end;


 
Verg ©   (2005-03-22 09:22) [1]

Так и делай, а в чем вопрос? "Лучше" - это мутный какой-то термин.
Можно и просто читать пока recv (DataRead) не вернет <=0 прочитанных данных. Сокет неблокирующий, поэтому, в принципе можно не делать проверок FIONREAD.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.44 MB
Время: 0.012 c
1-1116907764
КиТаЯц
2005-05-24 08:09
2005.06.06
notepad (Блокнот ) и Utf8


1-1116509769
Object
2005-05-19 17:36
2005.06.06
Как найти запись в XML без аттрибутов?


4-1113721831
Ola
2005-04-17 11:10
2005.06.06
Как при запуске приложения менять курсор мыши на мой собственный.


4-1113726261
star.ru
2005-04-17 12:24
2005.06.06
Nero CD-DVD Speed


1-1116477407
Andurbay
2005-05-19 08:36
2005.06.06
Печать в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский