我开发了一个Delphi Web服务器应用程序(TWebModule)。它在Windows下作为Apache上的ISAPI DLL运行。该应用程序反过来会使用Indy TIdHTTP组件频繁地对其他网站进行https调用。定期使用TIdHTTP.get方法时出现此错误:获取Indy错误“无法绑定套接字,地址和端口已在使用中”
无法绑定套接字。地址和端口已在使用
下面是代码:
IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
IdHTTP := TIdHTTP.create(nil);
idhttp.handleredirects := True;
idhttp.OnRedirect := DoRedirect;
with IdSSLIOHandlerSocket1 do begin
SSLOptions.Method := sslvSSLv3;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 2;
end;
with IdHTTP do begin
IOHandler := IdSSLIOHandlerSocket1;
ProxyParams.BasicAuthentication := False;
Request.UserAgent := 'Test Google Analytics Interface';
Request.ContentType := 'text/html';
request.connection := 'keep-alive';
Request.Accept := 'text/html, */*';
end;
try
idhttp.get('http://www.mysite.com......');
except
.......
end;
IdHTTP.free;
IdSSLIOHandlerSocket1.free;
我已阅读有关reusesocket方法,它可以在TIdHttp和TIdSSLLIOHandlerSocketOpenSSL对象都可以设置。将此设置为rsTrue可以解决我的问题吗?我问,因为我没有能够复制这个错误,它只是定期发生。
其他注意事项:
- 我知道TWebModule的多个实例正在催生。
- 是否将所有对TIdHttp.get的调用都封装在TCriticalSection中解决了问题?
UPDATE: 做更多的搜索我碰到这个来在互联网上后: link text
当我做了的netstat -n我也得到了一堆状态为“CLOSE_WAIT”条目。
你的意思是在idhttp组件上使用静态端口?服务器上是否有可能导致此端口发生冲突的其他功能? – 2010-05-17 14:12:52
好的 - 我会试试这个。所以如果我理解正确的话;不允许通过同一端口与TIdHttp同时通话。一次只能有一个电话。但是,让我感到困惑的是,一旦发生这种错误,它会继续进行所有后续调用(即使我确信它们不会与其他调用同时发生)。就好像一旦它被打破,它就会破裂。 – 2010-05-18 02:30:23
问题:我是否需要为tidhttp客户端池创建自己的“管理”? – 2010-05-18 20:32:14