Bonjour à tous,

J'ai un programme client Windev qui communique avec un serveur de socket Delphi.
Schéma standard, mon client demande la connexion au serveur si ça fonctionne il écrit dans la socket et là ma fonction Réception prend le relai et attends pendant 10 s. la réponse. Si au bout de 10s. la variable qui lit la socket est vide alors j'ai un message "Erreur en réception". Seulement j'ai régulièrement des "erreurs en réception" et je n'arrive pas à trouver la solution ni à la reproduire systématiquement. Et là bim j'ai pu logger côté Delphi l'erreur :

"Disconnecting Socket Error n°10053 : Software caused connection abort." sachant que cette erreur c'est moi qui la gère dans la procédure :
ServerSocketClientError :

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
procedure TMainForm.ServerSocketClientError(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
    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;
    LogErreur(ErrorMsg);
end;
J'ai fouillé un peu sur le net mais ça ne m'a pas trop aidé...est ce que cette erreur vous parle ?
Merci d'avance