Page 1 sur 1

Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 9:12
par celtic88
Bonjour les pures,, :D

j'ai constaté que le multithreading avec la bibliothèque "network server" génère beaucoup d'erreur " fuite de mémoire " a cause de la mémoire libérée directement quand un "#PB_NetworkEvent_Disconnect" se produite,pour moi c'ést un très gros problème alors j'ai décidé de ne plus utiliser cette bibliothèque. !

Avez-vous des suggestions ?.
Merci.

Re: Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 9:41
par djes
Oui, j'avais noté le même problème, et je (de mémoire) l'avais résolu en ne faisait pas CloseNetworkConnection(). As-tu essayé ?

Re: Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 10:39
par celtic88
@djes

mais,, ce n'est pas très pratique,en plus même avec "ReceiveNetworkData" ou "SendNetworkData" le programme plante quand le serveur ferme la connection et libère la mémoire :/

Re: Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 10:56
par celtic88
mmm, je pense que "pb" utilise la fonction"WSAAsyncSelect" et "Event: FD_CLOSE"

https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Re: Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 12:06
par djes
Oui, je pense qu'il faut respecter la procédure décrite dans cette page
Data arrives on socket s; Windows Sockets 2 posts WSAAsyncSelect message
Application processes some other message
While processing, application issues an ioctlsocket(s, FIONREAD...) and notices that there is data ready to be read
Application issues a recv(s,...) to read the data
Application loops to process next message, eventually reaching the WSAAsyncSelect message indicating that data is ready to read
Application issues recv(s,...), which fails with the error WSAEWOULDBLOCK.
et se méfier du close, car il est possible que ce soit PB qui le gère...

Re: Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 14:13
par celtic88
en fait il utilise "api select et WSAFDIsSet" "par OLLYDBG"
mais jusqu'à maintenant pas de solution..alors j'utilise les winapi

Re: Problème avec la bibliothèque "network"

Publié : ven. 17/mars/2017 15:22
par celtic88
une solution c'est de remplacer les deux function "ReceiveNetworkData" et "SendNetworkData" coté serveur pour utiliser le multi thread sans crash, par "ReceiveNetworkDataServer" et "SendNetworkDataServer"

Code : Tout sélectionner

Macro ReceiveNetworkDataServer(sock,Buffer,sizebuffer)
   recv_(sock, Buffer, sizebuffer,0) 
 EndMacro
 
Macro SendNetworkDataServer(sock,Buffer,sizebuffer)
   send_(sock, Buffer, sizebuffer,0) 
 EndMacro
cette méthode marche sur windows et linux et mac x ,car il utilisent les mêmes call !!

*ps: quand le client se connecte, il faut retirer l'identifiant système de connection "ConnectionID(Connexion)" pour utiliser c'est deux macro.

reste à valider.

Re: Problème avec la bibliothèque "network"

Publié : sam. 18/mars/2017 13:19
par JohnJohnsonSHERMAN
J'ai moi aussi eu des problémes avec cette lib pour mon serveur web, mais je n'ai pas constaté de fuites mémoires maintenant. Je vais checker avec valgrind tout à l'heure

Ah, il y a un autre "bug" : sous Linux (Ubuntu ou Debian) , la fonction SendNetworkData() n'envoie que les 28 premiers ko de données, de sorte que mon serveur web envoie correctement les pages HTML et CSS mais tronque toutes les images. Cela n'apparait que lors d'une connection à distance, en localhost, tout se passe bien. Je pense à un probléme de taille de buffer d'envoi du coté des fonctions de pls bas niveau/ de la carte réseau... Auquel cas PB n'envoie que le premier paquet, puis "oublie" qu'il reste des données a envoyer... Ce probléme est apparu sur tous les PC ayant une distribution Ubuntu ou Debian installée dessus, je n'ai pas testé sous d'autres distros comme Fedora ou CentOS.... à voir.
Si vous voulez tester, mon code est ici : http://www.purebasic.fr/french/viewtopi ... it=pureweb

Re: Problème avec la bibliothèque "network"

Publié : sam. 18/mars/2017 16:34
par celtic88
@JohnJohnsonSHERMAN

test avec plus de 200 connection et tu verras.
je parle en mode multithreading bien sur

Re: Problème avec la bibliothèque "network"

Publié : sam. 18/mars/2017 17:40
par JohnJohnsonSHERMAN
@Celtic : je parlais d'un bug qui aparraissait sans raison dans le code de mon serveur, lorsqu'exécuté sur un Linux là ou sous Windows, avec le même code exactement, aucun probléme... Les gros fichiers sont tronqués à 28ko

Je vais faire le test de mémoire tout à l'heure ou demain, sous linux