Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.21;
Скачать: CL | DM;

Вниз

Определение отключения TSocket   Найти похожие ветки 

 
panov ©   (2003-05-15 20:55) [0]

Реализую работу с Socket на низком уровне.

Не получается определить красиво разрыв(нормальное отсоединение) соединения.

Пришлось некрасивым способом, реализованным ниже, пользоваться.
WSAEventSelect(
fSocket,
fEvent,
FD_READ or FD_CLOSE);

FD_READ or FD_CLOSE потому, что одновременно проверять, есть ли входящие данные для обработки.

Есть ли стандартное решение?


procedure TThSC.Execute;
var
WaitResult: DWORD;
p: array[0..511] of Char;
i: Integer;
s: String;
begin

repeat
if WSAGetLastError<>0 then ShowMessage("??");

WSAEventSelect(
fSocket,
fEvent,
FD_READ or FD_CLOSE);
WaitResult := WaitForSingleObject(fEvent,1000);
if Terminated then Exit;
case WaitResult of
WAIT_OBJECT_0:
begin
fErr := Recv(fSocket,p,511,0);
if fErr>0 then
begin
p[fErr] := #0;
s := "";
for i := 0 to fErr-1 do
begin
if (p[i]=#13) then
begin
Disp("Received:"+s);
s := "";
continue;
end;

if (p[i]=#10) then continue;
s := s+ p[i];
end;
if s<>"" then Disp("Received:"+s);
end
else
begin
Disp("Closed");
Terminate;
break;
end;
WSAResetEvent(fEvent);
end;
WAIT_TIMEOUT:
begin
Disp("TimeOut");
end;
end;
until (WaitResult = WAIT_FAILED) or Terminated;
end;


 
Digitman ©   (2003-05-16 08:04) [1]

WSAEventSelect() + WSAEnumNetworkEvents()


 
panov ©   (2003-05-16 11:12) [2]

Спасибо, буду пробовать.


 
Zelius ©   (2003-05-16 11:57) [3]

Способ вполне нормальный, APIшеый, только поменять WSA... на обычный select() (как в Indy сделано), что бы текст упростить, и после Recv проверять на ошибку:
case Recv(..) fo
SOCKET_ERROR: ...;
0: ..; // Connection closed gracefully
else
// данные получены
end;



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

Текущий архив: 2003.07.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.177 c
1-67844
Man
2003-07-07 18:51
2003.07.21
использование форм-шаблонов


3-67714
Sliften
2003-06-25 22:34
2003.07.21
можно ли прграмно дабовлят в таблицу новые колонки


1-67900
Alex_DM
2003-07-08 14:25
2003.07.21
Динамические массивы и DLL несовместимы?


1-67804
Smok_er
2003-07-08 14:18
2003.07.21
MDI Окошки


14-68028
Juster~
2003-07-04 13:31
2003.07.21
Мой проц