Winsock Fehler 10093
-
Hi Leude,
ich habe mit dem gleich folgenden Codezeilen das Problem, dass ich beim ausführen genau 1 mal die Funktion ohne Fehler durchführen kann. Sprich ich kann genau 1 mal einen HTTP Request über meinen TCP Port schicken, denn beim 2. mal tritt der Winsock Fehler 10093 auf. Dieser Fehler besagt das ich entweder Winsock nicht initialisiert habe oder zu oft Winsock deinitialisiert habe. Beides tue ich auch im Ktor bzw. Dtor meiner Singleton Klasse nur 1 mal, also kann da der Fehler nicht sein. Eine andere Fehlerquelle wäre wenn ich versuchen würde auf meinen Socket zuzugreifen, den noch ein anderer aktiver Thread benutzen würde. ( Alles laut MSDN ).
Dazu kann ich nur sagen, dass ich immer einen neuen Socket initialisiere sobald ich meine Funktion betrette, und diesen schliesse sobald ich gesendet habe, ergo fällt das als Fehlerquelle auch weg.
Ich habe folgenden Dinge bereits versucht:
-Einen Socket für meine Klasse zu benutzen,
-Winsock jedes mal zu initialisieren // deinitialisieren.
Beides ohen Erfolg.Als Hilfsmittel habe ich bereits verwendet; Google, diverse Programmierforen, IRC Chats, MSDN etc.
Ihrgendwie konnte mir bis dato keiner helfen, hoffe das einer von euch das kann.
Nun aber zum besagten Code, der genau 1 mal funzt und dannach nicht mehr
char sz[576] ; sprintf( sz, "\nNew Request: %s\n", data ) ; printToFile("logs/MasterClient.log",sz) ; if( winsockRes != SOCKET_ERROR ) { printToFile("logs/MasterClient.log","Creating Socket...\n" ) ; SOCKET sender = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ; //Socket anlegen if( sender != INVALID_SOCKET ) { printToFile("logs/MasterClient.log", "Socket intited\n" ) ; sockaddr_in addr ; //Adress Objekt addr.sin_family = AF_INET ; addr.sin_port = htons(80) ; //Auf Port 80 verbinden addr.sin_addr.s_addr = inet_addr(MasterClient::PHP_HOST) ; //IP konnte nicht direkt aufgelöst werden => suchen if( addr.sin_addr.s_addr == INADDR_NONE ) { LPHOSTENT lpHost = gethostbyname( MasterClient::PHP_HOST ) ; addr.sin_addr.s_addr = ((LPIN_ADDR)lpHost->h_addr)->s_addr ; //Adresse laden } if( addr.sin_addr.s_addr != INADDR_NONE ) { //Verbindung herstellen versuchen int res = connect( sender, (struct sockaddr*) &addr, sizeof( sockaddr) ) ; if( res != SOCKET_ERROR ) { sprintf( sz, "Connected to %s\n", const_cast<char*>( MasterClient::PHP_HOST ) ) ; printToFile("logs/MasterClient.log",sz) ; //Nun können wir senden und empfangen ( nach belieben ) int iBytesSend = send( sender, data, strlen(data)+1, 0 ) ; if( iBytesSend > 0 ) { Sleep(5) ; sprintf(sz,"Sended %i Bytes\n", iBytesSend ) ; char recvBuffer[512] ; //Empfange Daten int iBytesRecv = recv( sender, recvBuffer, 512, 0 ) ; if( iBytesRecv > 0 ) { recvBuffer[ iBytesRecv ] = 0 ; sprintf( sz, "Recived %i Bytes Data: %s\n", iBytesRecv, recvBuffer ) ; printToFile("logs/MasterClient.log", sz ) ; }else { sprintf( sz, "Error reciving Data: %i\n", WSAGetLastError() ) ; printToFile("logs/MasterClient.log",sz ); } }else { sprintf(sz, "Error sending Data: %i\n", WSAGetLastError() ) ; printToFile("logs/MasterClient.log",sz ) ; } }else { sprintf( sz, "Error connecting to host: %i\n", WSAGetLastError() ) ; printToFile("logs/MasterClient.log",sz) ; } }else printToFile("logs/MasterClient.log","Error: No valid IP Adress\n") ; }else { sprintf(sz,"Error creating Socket: %i\n", WSAGetLastError() ) ; printToFile("logs/MasterClient.log", sz ) ; } //if( sender != INVALID_SOCKET ) int r = closesocket( sender ) ; sprintf( sz, "Result of closing Socket(%i): %i ( %i )\n", sender, r, WSAGetLastError()) ; printToFile("logs/MasterClient.log", sz ) ; }else { sprintf(sz,"Error init Winsock 2.0: %i\n", WSAGetLastError() ) ; printToFile("logs/MasterClient.log", sz ) ; }Die Daten haben die Form die man für HTTP Request braucht (GET .... /HTTP 1.1/... )