gpt4 book ai didi

delphi - 获取 Indy 错误 "Could not bind socket. Address and port are already in use"

转载 作者:行者123 更新时间:2023-12-03 18:29:33 25 4
gpt4 key购买 nike

我开发了一个 Delphi 网络服务器应用程序 (TWebModule)。它在 Windows 下的 Apache 上作为 ISAPI DLL 运行。该应用程序又使用 Indy TIdHTTP 组件对其他网站进行频繁的 https 调用。使用 TIdHTTP.get 方法时,我会定期收到此错误:

Could not bind socket. Address and port are already in use

代码如下:

  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 中可以解决问题吗?

更新:在互联网上做了更多搜索后,我遇到了这个: link text

当我执行 netstat -n 时,我也得到了一堆状态为“CLOSE_WAIT”的条目。

最佳答案

我终于明白了。原来我没有释放 TIDHttp 对象。在我的原型(prototype)示例中,它表明它是。但是我的实际源代码使用对象,并且释放 idhttp 对象的代码包含在未正确标记为覆盖的析构函数中。所以它从未被调用。

关于delphi - 获取 Indy 错误 "Could not bind socket. Address and port are already in use",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2849049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com