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 ;)
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.