我可以从Delphi的Indy客户端发送TCP RST吗?

问题描述:

我们一直在使用mod_php来测试Delphi Indy(SVN trunk)客户端和Apache。调用一个PHP脚本来注册一个关闭函数。我可以从Delphi的Indy客户端发送TCP RST吗?

在测试期间,只有在脚本结束并且connection_status()回到零时,才会调用此关闭功能。

如果在脚本执行过程中使用CURL并按Ctrl-C,CURL将发送一个RST标志设置为布尔值为true的TCP数据包。这确实会触发关机功能,并且connection_status()回来了。如果连接超时,TCP FIN标志会打开,但关闭功能不会触发 - 实际上Apache进程会进入CLOSE_WAIT,直到PHP脚本执行完毕。如果我使用Indy,则设置的唯一标志是FIN。

考虑到这一切,我们可以让Indy发送一个RST标志设置为true的TCP数据包吗?我们希望在连接超时(解决我们正在测试的问题)时执行此操作。

http://uk.php.net/connection_handling

印总是试图优雅地关闭连接,这将不会发送一个RST标志见。如果你需要,你必须自己强行关闭连接。

+0

在我们的具体情况下,我们看到发生超时。这是作为例外处理的。你能告诉我们我们可以做什么吗?我告诉那个写我们的应用的人,他在处理超时时,他认为连接已经丢失。 – jmkgreen

+0

超时是超时。由于超时本身,Indy不会关闭连接。对方有可能以异常的方式关闭连接,导致Indy无法立即检测到断开连接,这可能会导致超时。 –

+0

对方继续执行。事实上,在测试中,它会继续向客户端发送数据。我们显然缺少一些东西。我会要求我们的家伙进一步研究,或许提供一个更简洁的问题。 – jmkgreen