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

Вниз

WSAWaitForMultipleEvents для однонитевого сервера   Найти похожие ветки 

 
Евгений07   (2011-09-13 10:45) [37]

Доброго времени, мастера!
Нашел пожирателя ЦП - это клиент, не получавший подтверждения
Evgeny V   (12.09.11 14:26) [32]
Если работа идет в разных потоках - то это тоже ошибка

Сейчас переписал SocketBar в поток серверной нити
Сервер не видит подключения клиента

Клиент сделан на WinSock
   Len := SelectFDSet;          
   Len := connect (Sockett, Addr, SizeOf(TSockAddr) ) ;
, , ,
   if FD_IsSet(Sockett, FDSetR) or FD_IsSet(Sockett, FDSetW)
   then begin
Res := PostMessage(wnd, WM_PewForArx, 1, 2); // открытка подключения = принята
     if not Res then
       OperSocet := 1  //сбой
     else begin
       OperSocet := 10;  // работа = работает
     end;
   end;  
 if (OperSocet >= 10) // ...
 then begin                             //
   Len := SelectFDSet;          
   if FD_IsSet(Sockett, FDSetR) then  begin
// = здесь тишина
   end;
 end;  

Сервер не видит коннекта
 hEvent:= WSACreateEvent;
 if hEvent = WSA_INVALID_EVENT then Exit;
 Flags := SOCKET_ERROR;
 Flags := WSAEventSelect(Sockett, hEvent, FD_WRITE or FD_READ or FD_CONNECT or FD_CLOSE);
 if Flags = SOCKET_ERROR then Exit
 else while True do begin
   Event:= WSAWaitForMultipleEvents(1, @hEvent, False, WSA_INFINITE, False);   //
   if (Event = WSA_WAIT_FAILED) then begin
         Break;
   end;
   if (WSAEnumNetworkEvents(Sockett, hEvent, @NetworkEvents) = SOCKET_ERROR)
   then begin
         Form1.Memo1.Lines.Add("WSAEnumNetworkEvents() failed with error: " + IntToStr(WSAGetLastError));
         Break;
   end;
   WSAResetEvent(hEvent);  

   if ((NetworkEvents.lNetworkEvents and FD_CONNECT)<>0) then begin
     if (NetworkEvents.iErrorCode[FD_CONNECT_BIT]<>0) then begin
       Form1.Memo1.Lines.Add("FD_CONNECT failed with error:"  + IntToStr(NetworkEvents.iErrorCode[FD_CONNECT_BIT]));
       Break;
     end else begin
       Len := SizeOf(TSockAddr);
       AcceptedSock := Accept(Sockett, Addr, Len);
       if AcceptedSock = Invalid_Socket then begin    
         Form1.Memo1.Lines.Add("FD_CONNECT failed with error:"  + IntToStr(NetworkEvents.iErrorCode[FD_CONNECT_BIT]));
         Break;
       end else begin
         OperSocet := 10;  
       end;
       Form1.Memo1.Lines.Add("Connect socket: " + IntToStr(Sockett));
     end;
   end;

Может я зря пробую подключать коннект в дополнительной нити?
Если подключать коннект в основной нити, то что то фурычит.
Тогда как ждать коннект?
Или в клиенте делать WSAConnect?



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

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

Наверх





Память: 0.45 MB
Время: 0.13 c
2-1315739001
я
2011-09-11 15:03
2011.12.18
ftGraphic, DBGrid,ClientDataSet,DataSource


2-1315838395
Pcrepair
2011-09-12 18:39
2011.12.18
как подключить модуль в RAD2010


15-1314369615
6136
2011-08-26 18:40
2011.12.18
html для отправки строки на сервер


15-1314945552
ClawClaw
2011-09-02 10:39
2011.12.18
Составление расписание в ВУЗе


15-1314184414
DVM
2011-08-24 15:13
2011.12.18
Посоветуйте как лучше сделать





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский