Erreurs winsosk

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 204 fois - Téléchargée 32 fois

Contenu du snippet

Voici une petite gestion des erreurs de winsock.

ce code est a placer dens le OnError d'un composant TClientSocket
Merci a gab pour cette source ;)
enjoy ;)

p.s. : Si vous connaissez d'autres erreurs du winsock, merci de m'en avertir. Si vou modifiez ma procédure merci de m'envoyer votre modification a djtexas13@hotmail.com

Source / Exemple :


procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
var
  ErrorMsg: string;
begin
  // définition du message d'erreur en fonction du code d'erreur
  case ErrorCode of
    10004 : ErrorMsg := 'Interrupted function call.';
    10013 : ErrorMsg := 'Permission Refusée.';
    10014 : ErrorMsg := 'Mauvaise adresse.';
    10022 : ErrorMsg := 'Arguments Invalides.';
    10024 : ErrorMsg := 'Trop de fichiers ouverts.';
    10035 : ErrorMsg := 'Resource temporarily unavailable.';
    10036 : ErrorMsg := 'Operation en cours.';
    10037 : ErrorMsg := 'Operation déjà en cours.';
    10038 : ErrorMsg := 'Socket operation on non-socket.';
    10039 : ErrorMsg := 'Destination address required.';
    10040 : ErrorMsg := 'Message trop long.';
    10041 : ErrorMsg := 'Protocol wrong type for socket.';
    10042 : ErrorMsg := 'Bad protocol option.';
    10043 : ErrorMsg := 'Protocol not supported.';
    10044 : ErrorMsg := 'Socket type not supported.';
    10045 : ErrorMsg := 'Operation not supported.';
    10046 : ErrorMsg := 'Protocol family not supported.';
    10047 : ErrorMsg := 'Address family not supported by protocol family.';
    10048 : ErrorMsg := 'Address already in use.';
    10049 : ErrorMsg := 'Cannot assign requested address.';
    10050 : ErrorMsg := 'Network is down.';
    10051 : ErrorMsg := 'Network is unreachable.';
    10052 : ErrorMsg := 'Network dropped connection on reset.';
    10053 : ErrorMsg := 'Software caused connection abort.';
    10054 : ErrorMsg := 'Connection reset by peer.';
    10055 : ErrorMsg := 'No buffer space available.';
    10056 : ErrorMsg := 'Socket is already connected.';
    10057 : ErrorMsg := 'Socket is not connected.';
    10058 : ErrorMsg := 'Cannot send after socket shutdown.';
    10060 : ErrorMsg := 'Connection timed out.';
    10061 : ErrorMsg := 'Connection refused.';
    10064 : ErrorMsg := 'Host is down.';
    10065 : ErrorMsg := 'No route to host.';
    10067 : ErrorMsg := 'Too many processes.';
    10091 : ErrorMsg := 'Network subsystem is unavailable.';
    10092 : ErrorMsg := 'WINSOCK.DLL version out of range.';
    10093 : ErrorMsg := 'Successful WSAStartup not yet performed.';
    10094 : ErrorMsg := 'Graceful shutdown in progress.';
    11001 : ErrorMsg := 'Host not found.';
    11002 : ErrorMsg := 'Non-authoritative host not found.';
    11003 : ErrorMsg := 'This is a non-recoverable error.';
    11004 : ErrorMsg := 'Valid name, no data record of requested type.';
  else
    // erreur inconnue
    ErrorMsg := 'Unknown socket error.';
  end;
  // mise en forme de la signification de l'erreur
  ErrorMsg := 'Socket Error n°' + IntToStr(ErrorCode) + ' : ' + ErrorMsg;
  // l'erreur est traitée
  ErrorCode := 0;
  // définition du type d'erreur
  case ErrorEvent of
    eeSend       : ErrorMsg := 'Writing ' + ErrorMsg;
    eeReceive    : ErrorMsg := 'Reading ' + ErrorMsg;
    eeConnect    : ErrorMsg := 'Connecting ' + ErrorMsg;
    eeDisconnect : ErrorMsg := 'Disconnecting ' + ErrorMsg;
    eeAccept     : ErrorMsg := 'Accepting ' + ErrorMsg;
  else
    // erreur inconnue
    ErrorMsg := 'Unknown ' + ErrorMsg;
  end;
  // notifier l'utilisateur de l'erreur
  Application.MessageBox(PChar(ErrorMsg), PChar('Erreur de connexion'), MB_OK or MB_ICONERROR);
end;

Conclusion :


il est ainsi possible d'intercepter tout type d'erreur du winsock (avant la VCL) et ainsi faciliter la gestion d'un programme dédié a internet avec utilisation d'un clientsocket, je pense que la source est assez commentée pour plus d'info contactez moi ;)

A voir également

Ajouter un commentaire Commentaires
Messages postés
20
Date d'inscription
mardi 16 avril 2002
Statut
Membre
Dernière intervention
9 mai 2006

J'avoie qun fichier ressource améliore la lisibilité du code
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Pour que ce code puisse être facilement réutilisable, il serait bon d'externaliser dans un fichier ressource de chaine (ou une simple unité), du style :
ResourceString
10004 = 'Interrupted function call.';
10013 = 'Permission Refusée.';
10014 = 'Mauvaise adresse.';
10022 = 'Arguments Invalides.';

etc...
Puis d'appeler la chaine à afficher de la façon suivante :
//Si la chaîne de ressource n'existe pas, LoadStr renvoie une chaîne vide
ErrorMsg := LoadStr(ErrorCode);
If ErrorMsg = EmptyStr then
ErrorMsg := 'Unknown socket error.';

Ainsi, le code devient facilement réutilisable et plus facile à lire.
Je t'envoie le code proposé par mail.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.