Erreurs winsosk

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

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.