begin process at 2012 05 30 17:16:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

socket 100% CPU


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

socket 100% CPU

mardi 19 juillet 2005 à 20:21:27 | socket 100% CPU

fredo2009

Salut@tous

Voilà la fonction que j'utilise pour savoir si un port est ouvert sur une ip:
DWORD WINAPI connection( LPVOID Param )
 {
 struct config * conf = (struct config *)Param;
 WSADATA WSAData;
 WSAStartup(MAKEWORD(2,0), &WSAData);
 conf->sin.sin_addr.s_addr = ntohl(conf->ip);
 conf->sin.sin_family = AF_INET;
 conf->sin.sin_port = ntohs(conf->port);
 conf->sock = socket(AF_INET,SOCK_STREAM,0);
 bind(conf->sock, (SOCKADDR *)&conf->sin, sizeof(conf->sin));
 if ( !connect(conf->sock, (SOCKADDR *)&conf->sin, sizeof(conf->sin)) )
       {
       FILE * fic;
    char retour[] = "\n";
       /* Ouverture d'un fichier */
       fic = fopen("resultats.dat", "a+");              
       /* Ecrire chaîne dans le fichier */
       fwrite(inet_ntoa(conf->sin.sin_addr), strlen(inet_ntoa(conf->sin.sin_addr)), 1, fic);
       fwrite(retour, strlen(retour), 1, fic);
       fclose(fic);
       }
    nthread++;
 closesocket(conf->sock);
 WSACleanup();
 CloseHandle(conf->hthread);
 free(conf);
 }

Mais dans le cas de mon scanner multithread basé sur le code :
http://www.cppfrance.com/code.aspx?ID=28177
J'obtiens un cpu 100%
J'imagine qu'il y a d'autres façon de savoir si un port est ouvert
J'espère que quelqu'un pourra me dire ce qui est à l'origine de cette surconsommation de ressources.

Je pense que c'est là que je dois intervenir:
bind(conf->sock, (SOCKADDR *)&conf->sin, sizeof(conf->sin));
 if ( !connect(conf->sock, (SOCKADDR *)&conf->sin, sizeof(conf->sin)) )
mardi 19 juillet 2005 à 20:33:38 | Re : socket 100% CPU
mardi 19 juillet 2005 à 23:41:58 | Re : socket 100% CPU

aardman

Membre Club
Salut,
Dans ma source j'utilise l'api GetTcpTable(), fonction qui ne permet pas d'obtenir le PID du processus qui a ouvert le port (ca peut etre utile).

Cosmobob a posté une source plus récente qui permet de faire cela:
http://www.cppfrance.com/code.aspx?ID=24984

mercredi 20 juillet 2005 à 10:23:37 | Re : socket 100% CPU

fredo2009

en fait je me demande si c'est pas plutot la fonction thread qui poserait problème.
Car même avec un thread de 1 ça monte à fond mon CPU

for (;startip <= endip;startip++)
   {
                      while ( !nthread );
    {
    conf = (struct config *) malloc(sizeof(struct config) );
    conf->ip = startip;
    conf->port = port;
    conf->hthread = CreateThread(NULL, 0, &connection, conf, 0, NULL);
    nthread--;
    }
   }
mercredi 20 juillet 2005 à 11:00:49 | Re : socket 100% CPU

jean84

Le probleme des threads c'est que justement il te bouffe des ressources processeurs en + de ton programme et il faut savoir que les connexions reseaux sa peut etre super lourd a gerer.... Tu utilise toujours 100 threads a la fois ?? parce que si c'est le cas, cherche pas plus loin....  faudrait revoir le nombre de tread a la baisse au t'acheter une tour 4 proce bi-xeon avec hyperthreading et 10 go de ram ... lol
Non serieux, j'ai un p4 2,8e (o/c @ 3.33) et meme avec l'hyperthreading, j'ai certain programme qui utilise 2 threads et je grimpe deja a 50 % (si j'avais pas l'HT je serais a 100 %). Donc pour finir, mon conseil serai de baisser le nombre de thread et de les optimiser a fond.
@++

"Avant même de fonctionner, tout programme est déjà obsolète."


mercredi 20 juillet 2005 à 11:31:25 | Re : socket 100% CPU

fredo2009

Quand je compare mon prog avec un autre genre scan100.exe( c'est un scanner 100 thread, il existe aussi en version 500 et 1000), ça me bouffe que dalle en ressource, j'atteind même pas les 2% du CPU.

Là je sèche!
mercredi 20 juillet 2005 à 11:54:38 | Re : socket 100% CPU

jean84

La je t'avoue que je comprend pas non-plus...Un truc que j'avais pas remarquer au debut et que je ne sais pas si tu la modifier c'est la facon de fermer ton thread... tu utilise toujours CloseHandle(conf->hthread) ? parce que comme la dit BruNews, cela ne fait que cacher ton thread. A tu essayer terminatethread() ? Sinon j'imagine qu'en fait, meme la tache du thread termine, il doit rester en memoire .... ce qu'y fait qu'au final, 100 threads en memoire qui tourne pour rien .... c'est gore !!!
Je te conseil d'aller voir la msdn(je sais c'est lourd comme site mais c'est utile).
Tiens j'ai fait une petite recherhce vite fait. Va sur
=> [ Lien ]
En esperant que ca te soit utile.
@++

"Avant même de fonctionner, tout programme est déjà obsolète."

Jean84 allias Ion@ce
Webmaster de http://www.latriyade.com
mercredi 20 juillet 2005 à 12:42:28 | Re : socket 100% CPU

fredo2009

Oui j'étais en train de voir ça!
Sinon j'ai essayé WaitForSingleObject
Ca marche, ça ne consomme presque plus rien, mais ça m'a méchement ralentit mon scanner!
On est sur la bonne voix!!!

for (;startip <= endip;startip++)
   {
                      while ( !nthread );
    {
    conf = (struct config *) malloc(sizeof(struct config) );
    conf->ip = startip;
    conf->port = port;
    conf->hthread = CreateThread(NULL, 0, &connection, conf, 0, NULL);
    WaitForSingleObject((conf->hthread),1000);
     nthread--;
    }
   }
mercredi 20 juillet 2005 à 15:26:27 | Re : socket 100% CPU

jean84

Je connais pas du tout cette fonction. C'est quoi le but au juste ??? J'ai pas compris pour la fonction therminatethread()... t'as teste ou pas ??

"Avant même de fonctionner, tout programme est déjà obsolète."


mercredi 20 juillet 2005 à 15:58:24 | Re : socket 100% CPU

fredo2009

Bon, j'ai test ça: TerminateThread(conf->hthread, 0); WaitForSingleObject((conf->hthread),200); ExitThread(0); D'après ce que j'ai compris, WaitForSingleObject attend (ici 200ms) avant de fermer le thread. TerminateThread et ExitThread n'ont rien changé à mon problème. WaitForSingleObject fonctionne mais le prog est ralenti!

1 2

Cette discussion est classée dans : port, sin, sock, conf, fic


Répondre à ce message

Sujets en rapport avec ce message

[SOCKET]Tjrs le pb de recuperation du buffer recv() [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur Socket, quand tu nous tiens ... [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur [C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l prb a la compilation vous vc++ [ par shadow1779 ] Bonjour,j'ai tenté de faire un programme en C utilisant les sockets, la personne qui lance son programme choisi elle meme l'ip et le port a se connect client serveur echange de donne [ par bapdur ] voici la version dun client et dun serveur que je fais pour un jeu mais les donnes son envoyer en continu jaimerais aire en sorte que si je tape un ca Erreur compilation, Requette pour Connaitre le premier port ouvert..... [ par wizard512 ] Bonsoir,Je souhaiterais avoir un peu d'aide si possible,pour finir de réalisé un petit programme en c,Car j'ai rencontré des problè problème avec WSAGetLastError() [ par fredo2009 ] Bonjour @ tousJe suis en train de coder un scanner multithread avec socket non bloquant.Mon soucis est de récupérer le message d'erreur résultant du c probleme de send en C avec socket [ par thorn74 ] bonjour je suis actuellement en IUT info et G un  projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte a serveur / client [ par the68 ] Bonjour à tous, Voilà je débute dans la programmation en C; j'ai suivis attentivement un tutoriel sur le C pour avoir les bases, et là je me lance d Connexion serveur client réseau [ par matad0r ] Bonjour ! Ceci est mon premier post ! Voilà mon problème : j'ai créer deux applications, une cliente et une serveur. Mais le problème est que elle ne


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,260 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales