Winsock connect Multithreading
-
hi,
ich will per Winsock connect() gleichzeitig verschiedene server auf ihre erreichbarkeit prüfen.
Habe dazu ein paar Threads (per WinAPI) erstellt und im jedem dann per connect() einen anderen Server überprüft.
Leider kommt be alles Servern das selbe Ergebniss. Bei meinen Test mit der Range 127.0.0.1-127.0.0.255 war das Ergebniss für alle keine Verbindung, und wnen ich auf 127.0.0.1 einen HTTP Server laufen lass, für alle 255 IPs das Ergebniss dass er Verbinden konnteCode der Check Funktion die Connect aufruft, diese Funktion wird von jeden Thread mit der jeweiligen Uri aufgerufen
Result SockScan::Check(Uri& uri) { long rc; SOCKET s; SOCKADDR_IN addr; s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) throw std::runtime_error("Create Socket failed, Line __LINE__"); memset(&addr,0,sizeof(SOCKADDR_IN)); //Socket Adresse nullen addr.sin_family=AF_INET; addr.sin_port=htons(uri.GetPort()); //Port addr.sin_addr.s_addr=inet_addr(uri.GetIp().ToString().c_str()); //IP rc = connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { Result retval(uri, Result::CLOSED); return retval; } else { Result retval(uri, Result::OPEN); return retval; } }Konstruktor der Klasse (wird einmalig aufgerufen)
WSADATA wsa; if (WSAStartup (MAKEWORD(2,0), //WinSock Version 2.0 &wsa) != 0 ) //Wenn nicht 0 zurück gegeben wird hat winsock nicht funktioniert throw std::runtime_error("WSAStartup failed, Line __LINE__");Muss ich die WSAStartup für jedes connect aufrufen oder passt das, so wies ist (einmalig)
Hofe ihr könnt mir helfen
Schonmal vielen Dank im vorausMFG
-
leb0rtran schrieb:
Bei meinen Test mit der Range 127.0.0.1-127.0.0.255 war das Ergebniss für alle keine Verbindung, und wnen ich auf 127.0.0.1 einen HTTP Server laufen lass, für alle 255 IPs das Ergebniss dass er Verbinden konnte
Das ist nicht wirklich eine "Range". Der gesamte Block 127.0.0.0/8 ist das Loopback-Device, d.h. mit jeder dieser Adressen erreichst du nur deinen eigenen Rechner.
-
ok, gut zu wissen
werds mal mit ner anderen (richtigen) range testenedit:
ok, mit ner "echten" Range läufts gut
thx für die Hilfe