Delphi 连接到Synapse上的某些代理时,SSL_Connect挂起

Delphi 连接到Synapse上的某些代理时,SSL_Connect挂起,delphi,openssl,timeout,connect,Delphi,Openssl,Timeout,Connect,我有一个多线程软件,它使用THTTPSend对象的HTTPMethod方法循环通过HTTP URL的TStringList。。。然而,代理开始出现错误——好的私有代理更少,坏的公共代理更多。有时,一些线程会挂起,并变得100%无响应。超时设置和心跳代码将被忽略;不会提出任何例外情况。无论我等待多长时间(最多10分钟),线程仍将挂起。关闭软件是停止线程的唯一方法 我发现被指控的方法是SSL\u Connect。据我所知,这种挂起行为可以通过使用非阻塞套接字()来纠正 问题是,Synapse是一个阻

我有一个多线程软件,它使用
THTTPSend
对象的
HTTPMethod
方法循环通过HTTP URL的
TStringList
。。。然而,代理开始出现错误——好的私有代理更少,坏的公共代理更多。有时,一些线程会挂起,并变得100%无响应。超时设置和
心跳
代码将被忽略;不会提出任何例外情况。无论我等待多长时间(最多10分钟),线程仍将挂起。关闭软件是停止线程的唯一方法

我发现被指控的方法是
SSL\u Connect
。据我所知,这种挂起行为可以通过使用非阻塞套接字()来纠正

问题是,Synapse是一个阻塞套接字库。对于这个小软件,我总是可以使用一个非阻塞套接字库,但我想在一些较大的软件中实现SSL协议。我负担不起为另一个可能有自己bug的Internet库更改所有代码

在仍然使用Synapse的情况下,如何设置SSL\u Connect的某种超时

没有代码,因为一切都非常简单。这是一堆正在循环的URL——没有别的!但是,如果你认为有必要(或者如果你需要任何其他类型的信息),告诉我

德尔福使用:2007

使用的Synapse版本:第40版(2012年)(编辑:最新SVN trunk下载版中仍然存在该漏洞。)


使用的OpenSSL版本:1.0.1e

您应该从SVN trunk获取源代码,发现的错误也应该通过邮件或电子邮件报告bugtracker@SirRufo最新的SVN主干无法解决此问题。当我发现这种奇怪的
SSL\u Connect
行为时,我试图以某种方式联系Synapse的社区。但这对我来说是不可能的,可能是因为我以前从未这样做过,而且我不确定应该发送什么(以及发送给谁?在哪里?)。F5和Ironport代理挂起是因为
ClientHello
太大。尝试通过删除
ClientHello
中不需要的密码来减少hello的大小。通过将
cipher\u list
设置为类似于
“HIGH:!RC4:!MD5:!eNULL:!aNULL:!ADH:!SRP:!PSK:!KRB5”
的值来实现这一点。我来到这里是为了和jww一样发表评论:尝试减少“ClientHello”的有效负载--大约255字节以下。您还可以使用OPENSSL_MAX_TLS1_2_CIPHER_LENGTH构建,同时禁用TLS1.2,或者使用具有“挂起修复”的较新版本。请参阅@NuSkooler-*“…一起禁用TLS 1.2…”-TLS 1.2和GCM密码套件是一件好事。删除较小的、不需要的密码套件。