Если вы используете актуальную версию Indy 10, вы можете использовать метод TIdSocketHandle.SetKeepAliveValues()
:
procedure SetKeepAliveValues(const AEnabled: Boolean; const ATimeMS, AInterval: Integer);
Например:
procedure TForm1.IdHTTPServer1Connect(AContext: TIdContext);
begin
// send a keep-alive every 1 second after
// 5 seconds of inactivity has been detected
AContext.Binding.SetKeepAliveValues(True, 5000, 1000);
end;
Обратите внимание, чтопараметры ATimeMS
и AInterval
поддерживаются только в Windows 2000 и более поздних версиях.
В противном случае используйте метод TIdSocketHandle.SetSockOpt()
напрямую, чтобы вручную включить параметр TCP / IP SO_KEEPALIVE
:
procedure TIdSocketHandle.SetSockOpt(ALevel: TIdSocketOptionLevel; AOptName: TIdSocketOption; AOptVal: Integer);
Например:
procedure TForm1.IdHTTPServer1Connect(AContext: TIdContext);
begin
AContext.Binding.SetSockOpt(Id_SOL_SOCKET, Id_SO_KEEPALIVE, 1);
end;