IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Disponibilité automatique des noms de domaines (.info) - Socket Error #10053


Sujet :

Delphi

  1. #1
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut Disponibilité automatique des noms de domaines (.info) - Socket Error #10053
    Bonjour,

    Je développe un logiciel qui vérifie automatiquement si les noms de domaines qu'on lui donne sont libre ou non.

    Le problème est qu'en moyenne quand il arrive au 110ième de la liste, il s'arrête et renvoie le message d'erreur suivant :

    Socket Error #10053
    Software caused connection abort.
    Voici la fonction qui effectue la requête sur le Whois gérant les SLD en .info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Function TForm1.Statut_beexe(R: string): Integer;
    var
      WhoIs : TIdWhois;
      Info : String;
     
    begin
      Result := 30;
     
      WhoIs := TIdWhois.Create;
      WhoIs.Port := 43;
      WhoIs.Host := 'whois.afilias.net';
      WhoIs.ConnectTimeout := 5000;
      Try
        Info := LowerCase(WhoIs.WhoIs(R + '.info'));
      Except
        On EIdConnectTimeout Do
          Result := 91;
      end;
     
      If (Pos('not found', Info) <> 0) Then //Free
        begin
          Result := 2;
        end;
    end;
    Code qui appel la fonction lorsque l'on appuie sur un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [...]
     
        If (Statut_beexe(s) = 2) Then
          begin
            Memo1.lines.Add(s);         //ajoute le contenu de s dans Memo
          end;
        If (Statut_beexe(s) = 91) Then
          begin
            Memo1.lines.Add('TIME OUT : ' + s);  //ajoute le contenu de s dans Memo
          end;
     
    [...]
    Pour résumer, j'aimerais qu'il vérifie la disponibilité d'une liste de noms de domaines sans renvoyer d'erreur.

    D'avance merci pour votre aide.



    xenos

  2. #2
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Tu crées un TIDWhoIs sans le libérer à la fin de ta procédure.

    Peut être qu'au bout d'un moment il y en a un peu trop en mémoire... Ajoutes un WhoIs.Free à la fin de Statut_beexe()

  3. #3
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci de ta réponse Okaryn,

    J'ai rajouté un WhoIs.Free; à la fin de Statut_beexe. Malgré ça il continue à me lancer la même erreur au même moment ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function TForm1.Statut_beexe(R: string): Integer;
    var
      WhoIs : TIdWhois;
      Info : String;
     
    begin
      Result := 30;
     
      WhoIs := TIdWhois.Create;
      WhoIs.Port := 43;
      WhoIs.Host := 'whois.afilias.net';
      WhoIs.ConnectTimeout := 5000;
      Try
        Info := LowerCase(WhoIs.WhoIs(R + '.info'));
      Except
        On EIdConnectTimeout Do
          Result := 91;
      end;
     
      If (Pos('not found', Info) <> 0) Then //Free
        begin
          Result := 2;
        end;
     
      WhoIs.Free;
     
    end;

  4. #4
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Il plante toujours à la même ligne ?

    Essaie de mettre cette ligne en 1er, par exemple, pour voir si ce n'est pas cette ligne qui provoque le problème.

    Autre idée : peut-être qu'il faudrait que tu déconnectes ton composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    whoIs.Disconnect(true);

  5. #5
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par Okaryn
    Il plante toujours à la même ligne ?

    Essaie de mettre cette ligne en 1er, par exemple, pour voir si ce n'est pas cette ligne qui provoque le problème.
    Non il ne s'agit pas de la même ligne ... c'est vers la ligne 110 qu'il se met à planter ... même en changeant l'ordre des mots, en changeant de dictionnaire, ... rien n'y fait c'est vers les 110 mots.

    Pour un même dictionnaire dont les mots sont dans le même ordre, il ne va pas planter au même mot, mais vers le 110ième mot.

    Citation Envoyé par Okaryn
    Autre idée : peut-être qu'il faudrait que tu déconnectes ton composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    whoIs.Disconnect(true);
    Je viens de rajouter ce code, malheursement, ça ne change rien ... il plante toujours vers la 110ième ligne ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Function TForm1.Statut_beexe(R: string): Integer;
    var
      WhoIs : TIdWhois;
      Info : String;
     
    begin
      Result := 30;
     
      WhoIs := TIdWhois.Create;
      WhoIs.Port := 43;
      WhoIs.Host := 'whois.afilias.net';
      WhoIs.ConnectTimeout := 5000;
      Try
        Info := LowerCase(WhoIs.WhoIs(R + '.info'));
      Except
        On EIdConnectTimeout Do
          Result := 91;
      end;
     
      If (Pos('not found', Info) <> 0) Then //Free
        begin
          Result := 2;
        end;
     
      WhoIs.Disconnect(true);
      WhoIs.Free;
     
    end;

  6. #6
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Hum... Alors là... Aucune idée

    Peut être trop de requêtes rapidement. Essaie de mettre un wait(1000) entre chaque appel à ta fonction, histoire de ne pas surcharger le serveur WhoIs (ou une valeur supérieur à 1000 (1 seconde) pour tester).

  7. #7
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci pour ton aide précieuse Okaryn !

    En définitif ce sera le dernier conseille que tu m'auras donné pensant ne plus pouvoir m'aider qui sera la clé de cette énigme !

    Donc en effet, c'était surement une mesure de protection de Verisign en bloquant l'accès au Whois après 110 requêtes en moins de 3min.

    De ce fait j'ai simplement rajouté un GetTickCount réglé sur 1sec.

    Donc aucun problème avec le code ... quoique j'suis content de l'avoir optimisé avec ton aide !

    Encore merci Okaryn !

    Bon développement à tous.



    xenos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extension des nom de domaines
    Par poupouille dans le forum Domaines
    Réponses: 1
    Dernier message: 05/12/2008, 18h25
  2. Lenteur de la resolution des nom de domaine
    Par passion_info dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 25/11/2008, 21h02
  3. [AJAX] Ajax mais sur des nom de domaine différent
    Par Are-no dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/09/2008, 13h42
  4. Réponses: 4
    Dernier message: 26/03/2008, 09h43
  5. Réponses: 9
    Dernier message: 23/12/2006, 08h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo