J'ai développé une application de serveur web Delphi (TWebModule). Elle fonctionne comme une DLL ISAPI sur Apache sous Windows. L'application effectue à son tour des appels https fréquents vers d'autres sites web en utilisant le composant Indy TIdHTTP. Périodiquement, j'obtiens cette erreur lorsque j'utilise la méthode TIdHTTP.get :
Impossible de lier le socket. L'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 à propos de la reusesocket qui peut être définie à la fois sur les objets TIdHttp et TIdSSLLIOHandlerSocketOpenSSL. Le fait de définir cette méthode à rsTrue résoudra-t-il mes problèmes ? Je pose la question parce que je n'ai pas été en mesure de reproduire cette erreur, qui ne se produit que périodiquement.
Autres considérations :
- Je sais que de multiples instances de TWebModule sont créées.
- Le fait de placer tous les appels à TIdHttp.get dans une TCriticalSection résoudrait-il le problème ?
UPDATE : Après avoir fait plus de recherches sur Internet, je suis tombé sur ceci : texte du lien
Quand je fais un netstat -n Je reçois également un grand nombre d'entrées avec le statut "CLOSE_WAIT".