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 konnte

    Code 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 voraus

    MFG



  • 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 testen

    edit:
    ok, mit ner "echten" Range läufts gut
    thx für die Hilfe


Anmelden zum Antworten