如何在TServerSocket中使用SO_KEEPALIVE?

时间:2013-03-12 21:15:46

标签: delphi sockets winsock

组件是否具有set选项属性,或者我需要使用setsockopt函数?

我想启用Keep-alive中构建的操作系统而不是我自己编写它... -.-“

所以,我的问题是,在我创建TServerSocket实例的构造函数中,如何启用此SO_KEEPALIVE选项?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

您可以使用setsockopt设置SO_KEEPALIVE

implementation

uses
  WinSock;

{$R *.dfm}

procedure TForm2.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
  OptVal: DWORD;
begin
  OptVal := 1;
  if setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_KEEPALIVE, PAnsiChar(@OptVal), SizeOf(OptVal)) = SOCKET_ERROR then
    raise Exception.Create(Format('WinSock Error %d', [WSAGetLastError()]));
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
 s := TServersocket.Create(Self);
 s.Port := 8090;
 s.OnClientConnect := ClientConnect;
 s.Open;
end;