Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
ВнизWSAWaitForMultipleEvents для однонитевого сервера Найти похожие ветки
← →
Евгений07 (2011-09-13 10:45) [37]Доброго времени, мастера!
Нашел пожирателя ЦП - это клиент, не получавший подтверждения
Evgeny V (12.09.11 14:26) [32]
Если работа идет в разных потоках - то это тоже ошибка
Сейчас переписал SocketBar в поток серверной нити
Сервер не видит подключения клиента
Клиент сделан на WinSockLen := 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