Problème de fermeture de connexions

Résolu
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 24 août 2007 à 02:52
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 28 août 2007 à 23:19
Bonjours. Enfait mon problème c'est que lorsque je lance un programme que j'ai créé celui-ci se déroule parfaitement bien. Mais après sa fermeture et lors du relancement de la même application j'ai un problème de fuite de mémoire. La mémoire vive alloué a mon application grossit de plus en plus sans s'arrêter. Je n'ai toujours pas compris d'ou pouvais venir le problème.

Voila mon code :
#include <stdio.h>
#include <winsock2.h>

#ifdef _MSC_VER
#pragma comment(lib,"ws2_32.lib")
#endif

SOCKET m_nSocket;
bool stop = false;

DWORD WINAPI test(void *){
    SOCKADDR_IN Destination;
    char ip[256];

    WSADATA init;
    WSAStartup(MAKEWORD(2,2), &init);

    unsigned long t = inet_addr("127.0.0.1");
   
    m_nSocket = socket(AF_INET,SOCK_STREAM,0);
    if(m_nSocket == INVALID_SOCKET)
        return 1;

    Destination.sin_family=AF_INET;
    Destination.sin_addr.s_addr=t;
    Destination.sin_port=htons(33334);

    while(!stop){
        printf("connect = %d\n", connect(m_nSocket, (struct sockaddr*)&Destination, sizeof(Destination)));
    }

    closesocket(m_nSocket);

    printf("WSACleanup()\n");
    WSACleanup();
    return 0;
}

int main(){
    CreateThread(NULL, 0, test, NULL, 0, NULL);
    system("pause");
    stop = true;

    Sleep(INFINITE);
    return 0;
}

Merci d'avance.

3 réponses

cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
28 août 2007 à 23:19
C'était un programme d'exemple, et le char ip[] j'ai oublier de l'enlever... Les erreurs sont "volontaire" dans le sens ou je n'écrit jamais du code comme sa. Mais j'ai essayer de syntétisé le plus rapidement possible le problème auquel j'été confronté et qui me semblé très étrange.
En fait j'ai appris que c'été mon système qui posé problème et non pas le code. Un simple redémarrage a résolu entièrement le problème.
Enfin merci quand même :)
3
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
24 août 2007 à 09:01
   salut bon déja

char ip[256]; << tu l'utilise ou ?
unsigned long t << utilité de la variable ???

il faut faire un test pour sa :     WSAStartup(MAKEWORD(2,2), &init);

ensuite quand tu quitte:
 if(m_nSocket == INVALID_SOCKET)
        return 1;

il faut ajouter un WSACleanup(); avant le return 1; ^^

  Sleep(INFINITE); mm

un while(1)_sleep(1000);

ne serait pas mieux ?

ciao et bon codage :)
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
24 août 2007 à 09:04
mm j'ai oublié le bug vient surement de cette ligne :

    while(!stop){
        printf("connect = %d\n", connect(m_nSocket, (struct sockaddr*)&Destination, sizeof(Destination)));

tu fait des connects sans arrêt jusqu'a qu'une touche soi appuyé .... bof
0
Rejoignez-nous