J'ai développé une application serveur web Delphi (TWebModule). Il fonctionne comme une DLL ISAPI sur Apache sous Windows. À son tour, l'application effectue des appels https fréquents vers d'autres sites Web à l'aide du composant Indy TIdHTTP. Périodiquement j'obtiens cette erreur lors de l'utilisation de la méthode TIdHTTP.get:Obtention d'une erreur Indy "Impossible de lier la socket L'adresse et le port sont déjà utilisés"
Impossible de lier le socket. Adresse et le port sont déjà utilisés
Voici le code:
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;
J'ai lu sur la méthode reusesocket, qui peut être mis sur les deux objets TIdHttp et TIdSSLLIOHandlerSocketOpenSSL. Va-t-on régler cela sur rsTrue pour résoudre mes problèmes? Je demande parce que je n'ai pas été en mesure de reproduire cette erreur, cela arrive juste périodiquement.
Autres considérations:
- Je sais que plusieurs instances de TWebModule sont pondus.
- Est-ce que l'encapsulation de tous les appels à TIdHttp.get dans un TCriticalSection résoudrait le problème?
MISE À JOUR: Après avoir fait plus des recherches sur Internet, je suis tombé sur ceci: link text
Quand je fais une netstat -n moi aussi obtenir un tas d'entrées avec le statut « CLOSE_WAIT ».
Vous voulez dire utiliser un port statique sur le composant idhttp? Y at-il une chance qu'une autre fonction se produise sur le serveur qui pourrait provoquer un conflit sur ce port? –
OK - Je vais essayer. Donc, si je comprends bien, les appels simultanés avec le TIdHttp sur le même port ne sont pas autorisés. Il ne peut y avoir qu'un seul appel à la fois. Ce qui me rend perplexe, c'est qu'une fois que cette erreur se produit, elle se poursuit pour tous les appels suivants (même si je suis tout à fait sûr qu'ils ne se produisent pas simultanément avec d'autres appels). C'est comme si une fois il se casse une fois qu'il est cassé pour de bon. –
Question: Dois-je créer ma propre "gestion" pour le pool de clients tidhttp? –