Delphi: TIdTCPClient disconnect 不要关闭连接
Delphi: TIdTCPClient disconnect don't close the connection
我正在调查活动 TCP 连接的增长。
似乎TIdTCPClient.Disconnect
不要关闭连接。
这是一个示例项目
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
IdTCPClient;
var
FClient: TIdTCPClient;
begin
try
FClient := TIdTCPClient.Create();
FClient.Connect('LOCALHOST', 6379);
FClient.Disconnect;
FClient.Free;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
多次打开此控制台应用程序会导致连接增加
netstat -na | find "6379"
旁注:我在柏林 10,Windows 7(但在 Windows 10 上是一样的)
连接已关闭。 TIME_WAIT
表示本地端点(本端)已关闭连接。
参考:https://superuser.com/questions/173535/what-are-close-wait-and-time-wait-states
Disconnect()
是关闭连接。 TIME_WAIT
状态是正常的 TCP 行为。
无论哪个对等点首先主动 关闭 TCP 连接(在本例中为您的客户端),其套接字端点都会进入 TIME_WAIT
状态,这是一个TCP 的安全功能可以丢弃该连接中剩余的任何杂散数据包。一旦 TIME_WAIT
超时,端点将在片刻后完全释放。
在另一个节点上,被动接收到关闭通知,它的套接字端点进入CLOSE_WAIT
状态,一旦关闭就被释放ACK
由其他同行编辑。那边没有TIME_WAIT
请参阅 TIME_WAIT and its design implications for protocols and scalable client server systems,其中对 TIME_WAIT
是什么、它存在的原因以及如何有效地使用它进行了非常冗长的讨论。
我正在调查活动 TCP 连接的增长。
似乎TIdTCPClient.Disconnect
不要关闭连接。
这是一个示例项目
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
IdTCPClient;
var
FClient: TIdTCPClient;
begin
try
FClient := TIdTCPClient.Create();
FClient.Connect('LOCALHOST', 6379);
FClient.Disconnect;
FClient.Free;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
多次打开此控制台应用程序会导致连接增加
netstat -na | find "6379"
旁注:我在柏林 10,Windows 7(但在 Windows 10 上是一样的)
连接已关闭。 TIME_WAIT
表示本地端点(本端)已关闭连接。
参考:https://superuser.com/questions/173535/what-are-close-wait-and-time-wait-states
Disconnect()
是关闭连接。 TIME_WAIT
状态是正常的 TCP 行为。
无论哪个对等点首先主动 关闭 TCP 连接(在本例中为您的客户端),其套接字端点都会进入 TIME_WAIT
状态,这是一个TCP 的安全功能可以丢弃该连接中剩余的任何杂散数据包。一旦 TIME_WAIT
超时,端点将在片刻后完全释放。
在另一个节点上,被动接收到关闭通知,它的套接字端点进入CLOSE_WAIT
状态,一旦关闭就被释放ACK
由其他同行编辑。那边没有TIME_WAIT
请参阅 TIME_WAIT and its design implications for protocols and scalable client server systems,其中对 TIME_WAIT
是什么、它存在的原因以及如何有效地使用它进行了非常冗长的讨论。