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=28177J'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)) )