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

Threads & Processus C++ Discussion :

Bloquer popup erreur socket 10060


Sujet :

Threads & Processus C++

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut Bloquer popup erreur socket 10060
    Bonjour,

    J'utilise Borland c++ builder 6.

    Un TCustomWinSocket * monSocket; entre 2 ordis sur le réseau local.
    Un TClientSocket *ClientSocket1;

    Ces 2 programmes sont exécutés de façon indépendante, c'est à dire que je ne les lance pas en même temps, et ils peuvent redémarrer n'importe quand.

    Des threads comme celui-ci :
    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
     
    class TThreadClientSocket : public TThread
    {
    	typedef struct tagTHREADNAME_INFO
    	{
    		DWORD dwType;     // must be 0x1000
    		LPCSTR szName;    // pointer to name (in user addr space)
    		DWORD dwThreadID; // thread ID (-1=caller thread)
    		DWORD dwFlags;    // reserved for future use, must be zero
    	} THREADNAME_INFO;
    private:
    	void SetName();
    protected:
    	void __fastcall Execute();
    public:
    	__fastcall TThreadClientSocket(bool CreateSuspended);
    	__fastcall TThreadClientSocket::~TThreadClientSocket(void);
    	void __fastcall TThreadClientSocket::envoyerMessage(void);
    	void __fastcall TThreadClientSocket::envoyerMessage(MESSAGE_SOCKET nouveau_message_socket, int nouvelle_valeur);
    	void __fastcall TThreadClientSocket::erreur(TErrorEvent ErrorEvent, /*TErrorEvent ErrorEvent*/ int ErrorCode);
    	void __fastcall TThreadClientSocket::deconnecte(void);
    	void __fastcall TThreadClientSocket::connexion(void);
    	void __fastcall TThreadClientSocket::connecte(void);
    	void __fastcall TThreadClientSocket::lookup(void);
    	void __fastcall TThreadClientSocket::lecture(void);
    	void __fastcall TThreadClientSocket::ecriture(void);
    };
    Et de temps en temps, j'ai un popup qui me dit "Asynchronous socket error 10060" sur le client.

    Cette erreur ne me gène pas trop pour le moment.
    Ce sera l'étape n°2 de l'éviter ...

    Mais déjà je la capture bien.
    Voici ce que le programme me dit dans un TMemo lorsque je le lance (dans le cas ou ca marche pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Recherche le serveur...
    Serveur trouvé, connexion en cours...
    Connection...
    err. ErrorEvent: 3 ErrorCode: 10060
    Erreur type 3 numéro 10060.
    Socket Error n°10060 : Unknown socket error.
    Unknown Accepting Disconnecting Connecting Socket Error n°10060 : Unknown socket error.
    Le client ou le serveur a interrompu la lisaison.
    Erreur type eeConnect numéro 0.
    Envoie du message impossible: non connecté!
    Je sais, beaucoup de blabla pour si peu...ca se répète.
    Mais ma question n°1 : comment ne pas avoir ce popup ?
    D'autant plus que mon thread essai de se reconnecter de temps en temps si ça marche pas, ce qui fait que je peux avoir une belle collection de popups quand j'allume l'écran !

    Par contre, quand le serveur et le client sont ok, j'ai bien mon échange de messages et tout fonctionne.

    Ne serait-ce pas une case à cocher dans Borland pour ne pas afficher les popups (genre projet/options..)?
    PS j'ai des try/catch, et c'est la seule erreur qui affiche un popup.

    J'ajoute que de temps en temps, sur le serveur, lorsqu'il redémarre (le programme, pas l'ordi) j'ai cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreure non critique :
    Exception Windows socket error: Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée (10048), on API 'bind'. Erreur FormActivate. Fichier: C:\c++camera\Prog_video_surv\Unit1.cpp Ligne:322
    Par contre, je ne sais pas si j'ai un popup sur cet ordi dans ce cas là...

    Il est possible que le socket ne soit pas bien quitté lorsque le programme s'arrête. Du coup il ne répond plus au client et j'ai une succession de popup sur le client.
    Mais on verra plus tard.

    Donc voila, merci à vous.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    C'est probablement plus une question "programmation windows" que "threads & process".
    Pour les problèmes d'échec au chargement de DLL on peut utiliser une fonction pour ne pas afficher de popup quand tu traites l'erreur dans ta logique: (voir SetErrorMode, ou pour une version locale à ta thread, SetThreadErrorMode)
    Peut-être que ça s'applique aussi pour cette popup?

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut
    Salut,
    Merci de ton aide, mais ca n'a pas marché.
    Je l'ai mis ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TThreadClientSocket::Execute()
    {      try
    	{	SetName();
    		SetErrorMode(SEM_NOGPFAULTERRORBOX);//The system does not display the Windows Error Reporting dialog.
    		//---- Place thread code here ----
      ...
    Et même ici (au cas où, par désespoir) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
    {	try
    	{	
        SetErrorMode(SEM_NOGPFAULTERRORBOX);//The system does not display the Windows Error Reporting dialog.
    	Application->Initialize();
    			Application->CreateForm(__classid(TForm1), &Form1);
    			Application->Run();
    ...
    J'ai pu remarquer au passage que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /*  ne fonctionne que sur Windows 7 et+
        BOOL SetThreadErrorMode(
        _In_   DWORD dwNewMode,
        _Out_  LPDWORD lpOldMode
        );*/
    Or mon code fonctionne sur un peu de tout, dont XP.

    En fait, je l'ai mis à tous mes Thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ::Execute()
    {      try
    	{	SetName();
                    SetErrorMode(SEM_NOGPFAULTERRORBOX);//The system does not display the Windows Error Reporting dialog.
    		//---- Place thread code here ----

Discussions similaires

  1. Problème erreurs sockets sous Linux
    Par Ange44 dans le forum Linux
    Réponses: 6
    Dernier message: 05/09/2006, 16h16
  2. Erreur Socket Asynchrone 10053
    Par QAYS dans le forum Delphi
    Réponses: 2
    Dernier message: 16/06/2006, 07h44
  3. TIdHTTPServer et erreur socket # 10049
    Par DaRiaN dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/04/2006, 16h04
  4. SQL Server: Java Erreur Socket
    Par BenoitM dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/04/2003, 16h32

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