我有一个多线程软件,使用TStringList
对象的HTTPMethod
方法遍历THTTPSend
个HTTP网址...但是,代理中出现了一个错误 - 较少有良好的私人代理,更多与坏公共代理。偶尔会有几个线程挂起并且100%无响应。超时设置和heartbeat
代码将被忽略;不会引起例外。无论我等多久(最多10分钟),线程仍然会挂起。关闭软件是阻止线程的唯一方法。
我发现有罪的方法是SSL_Connect
。根据我的阅读,这种悬挂行为可以通过使用非阻塞套接字来纠正(openssl ssl_connect blocks forever - how to set timeout?)
问题是,Synapse是一个阻塞套接字库。我总是可以为这个小软件使用非阻塞套接字库,但我想为我的一些更大的软件实现SSL协议。我不能为另一个可能有自己的bug的Internet库更改所有代码。
如何在仍然使用Synapse时为SSL_Connect
设置某种超时?
没有代码,因为一切都非常简单。这是一个循环的URL的TStringList - 没有别的!但是,如果您认为需要(或者您需要任何其他类型的信息),请告诉我。
Delphi使用: 2007
使用的Synapse版本:版本40(2012)(编辑:最新的SVN中继下载仍然存在该错误。)
使用的OpenSSL版本: 1.0.1e