TCP通信にはIndyを使用しています(D2009、Indy10)。
クライアントのリクエストを評価した後、クライアントに回答を送信したいと思います。したがって、このようにTIdContextを格納します(擬似コード)
procedure ConnectionManager.OnIncomingRequest (Context : TIdContext);
begin
Task := TTask.Create;
Task.Context := Context;
ThreadPool.AddTask (Task);
end;
procedure ThreadPool.Execute (Task : TTask);
begin
// Perform some computation
Context.Connection.IOHandler.Write ('Response');
end;
しかし、クライアントが要求と応答の送信準備ができている間のどこかで接続を終了した場合はどうなりますか?コンテキストがまだ有効かどうかを確認するにはどうすればよいですか?私は試した
if Assigned (Context) and Assigned (Context.Connection) and Context.Connection.Connected then
Context.Connection.IOHandler.Write ('Response');
しかし、それは役に立ちません。場合によっては、プログラムがハングし、実行を一時停止すると、現在の行がif条件の行であることがわかります。
ここでは何が起きるのですか?デッド接続を使用して送信しようとしないようにするにはどうすればよいですか?