jbJOGI
Cadet 4th Year
- Registriert
- März 2004
- Beiträge
- 105
hi,
ich schreibe mir im Moment ein Programm zur Steuerung meines Servers. Am Ende soll das Programm den Status des Server Anzeigen, diesen starten können und die Möglichkeit bieten einen "Poll" zu starten, ob der Server herunter gefahren werden kann, oder einer der Clients Enspruch erhebt.
Nun soll das Client-Tool ja möglichst immer laufen. Soll dann später mal als Tray-Icon umgesetzt werden. Vorher sollte aber der Rest schon gehen!
Ich habe mir eine Klasse geschrieben, die mit Hilfe der Winsock-Funktionalitäten ein einfaches "Interface" zum weiteren Programmieren bietet. Damit kann ich den Socket registrieren, Verbindung aufbauen, Daten senden und empfangen, plus ein paar für dieses Problem unwichtige Dinge mehr.
Mein Problem setzt nun an folgender Stelle an:
Das Client-Programm läuft auf meinem Rechner und verliert die Verbindung zum Server, ob nun durch ein shutdown des Servers oder Routerausfall oder sonstiges ist ja egal. Nun wird ein Thread gestartet, welcher alle paar Sekunden versucht die Verbindung wieder aufzubauen.
Die möchte ich gerne über ein erneutes connect(...) machen, da ich ja sonst nichts senden/empfangen kann. Ich bekomme dann aber den Fehlercode 10056 zurück (http://support.ipswitch.com/kb/WSK-19980714-EM10.htm).
Hier wird beschrieben, dass man auf einem Socket, der bereits verbunden war kein erneutes connect ausführen kann, bevor er nicht "disconnected" wurde.
ich hab das folgendermaßen versucht:
Eben wie ich die ursprüngliche Verbindung aufgebaut habe, aber mit den genannten Werten. Ich bekomme hier aber ebenfalls wieder den gleichen Fehler zurück.
Bei Google und in den Tutorials, die mir bisher halfen, konnte ich leider auch nichts dazu finden. aber irgendwie muss das doch gehen. Man kann doch nicht bei jedem Disconnect einen neue Socket auf machen.
Kann mir hier jemand helfen? Es wäre schade, wenn ich schon wieder so ewig an einem "kleinen Problem" hänge würde.
ich schreibe mir im Moment ein Programm zur Steuerung meines Servers. Am Ende soll das Programm den Status des Server Anzeigen, diesen starten können und die Möglichkeit bieten einen "Poll" zu starten, ob der Server herunter gefahren werden kann, oder einer der Clients Enspruch erhebt.
Nun soll das Client-Tool ja möglichst immer laufen. Soll dann später mal als Tray-Icon umgesetzt werden. Vorher sollte aber der Rest schon gehen!
Ich habe mir eine Klasse geschrieben, die mit Hilfe der Winsock-Funktionalitäten ein einfaches "Interface" zum weiteren Programmieren bietet. Damit kann ich den Socket registrieren, Verbindung aufbauen, Daten senden und empfangen, plus ein paar für dieses Problem unwichtige Dinge mehr.
Mein Problem setzt nun an folgender Stelle an:
Das Client-Programm läuft auf meinem Rechner und verliert die Verbindung zum Server, ob nun durch ein shutdown des Servers oder Routerausfall oder sonstiges ist ja egal. Nun wird ein Thread gestartet, welcher alle paar Sekunden versucht die Verbindung wieder aufzubauen.
Die möchte ich gerne über ein erneutes connect(...) machen, da ich ja sonst nichts senden/empfangen kann. Ich bekomme dann aber den Fehlercode 10056 zurück (http://support.ipswitch.com/kb/WSK-19980714-EM10.htm).
Hier wird beschrieben, dass man auf einem Socket, der bereits verbunden war kein erneutes connect ausführen kann, bevor er nicht "disconnected" wurde.
--by calling connect() with a AF_INET NULL destination address: INADDR_ANY (0.0.0.0), and port 0--
ich hab das folgendermaßen versucht:
Code:
// disconnect
// um connect erneut aufrufen zu können muss erst ein "disconnect" gemacht werden
struct sockaddr_in emptyServer;
unsigned long ulEmptyTargetIP;
memset( &emptyServer, 0, sizeof (emptyServer));
if ( ( ulEmptyTargetIP = inet_addr( "0.0.0.0" )) != INADDR_NONE ) {
memcpy( (char *) &emptyServer.sin_addr, &ulEmptyTargetIP, sizeof(ulEmptyTargetIP));
}
emptyServer.sin_family = AF_INET;
emptyServer.sin_port = htons( 0 );
connect( clientSocket, (struct sockaddr*)&emptyServer, sizeof(emptyServer) );
Bei Google und in den Tutorials, die mir bisher halfen, konnte ich leider auch nichts dazu finden. aber irgendwie muss das doch gehen. Man kann doch nicht bei jedem Disconnect einen neue Socket auf machen.
Kann mir hier jemand helfen? Es wäre schade, wenn ich schon wieder so ewig an einem "kleinen Problem" hänge würde.