[C] Sockets / connect()

posi90

Erfahrenes Mitglied
Hallo,

Ich habe eine Client/Server Verbindung programmiert mit einem Server und mehreren Clients. Verwaltung der Clients funktioniert über select und so.

Falls der Server nicht gestartet wurde, dauert es aber eine Weile bis der Client den Errorcode ausgibt bzw. den Error behandelt. Was kann man dagegen machen, damit der Client sofort weiß ob ein connect() nötig ist oder nicht?

Client-Code:
Code:
startWinsock();

s=socket(AF_INET,SOCK_STREAM,0);

memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
addr.sin_family=AF_INET;
addr.sin_port=htons(12345); // port 12345
addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener
rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));  //<- Hier tritt der Fehler auf (Code: 10061)

Der Code wird später einmal in C++/WinApi implementiert.

mfg. Poseidon
 
Hey,

ich programmiere auch viel mit Netzwerkprogrammierung. Hab auch das selbe Problem, doch mich hat das nie so wirklich gestört :).
Ich denke des dauert relativ lange, weil die connect()-Funktion einen Timeout hat, und sie erst den Fehler bringt wenn der abgelaufen ist. Müsstest mal schauen ob man diesen Wert ändern kann oder so.
Es kann aber dann dadurch zu mehr Fehlern führen, da es manchmal länger dauern kann bis eine Verbindung aufgebaut ist, jenachdem wieviel Traffic grad ist. Und wenn du jetzt den Timeout verkürzt bringt er vllt eine Fehlermeldung obwohl er eine Verbindung aufbauen könnte, nur das es halt mal bissl länger gedauert hat.

grüße
 
Falls der Server nicht gestartet wurde, dauert es aber eine Weile bis der Client den Errorcode ausgibt bzw. den Error behandelt.
Was bedeutet bei dir "eine Weile" konkret? Wenn der Server auf dem localhost läuft, sollte es eigentlich nicht sehr lange dauern; zumindest ist mir das noch nicht störend aufgefallen.

Gruß
MCoder
 
Hab schon verstanden, ich will nämlich ein Update-Programm schreiben.

"Vor dem Starten" (also bevor das Hauptfenster erscheint) soll sofort eine Messagebox in Form einer Fehlermeldung erscheinen, aber nur wenn der Server nicht läuft.
Falls er läuft, keine Messagebox, dann erst das Hauptfenster, worin ich meinen Updatevorgang starte.


Als Handymodell:

Eine Junge wartet schon sehnsüchtigst auf den Anruf seiner Freundin mit dem Finger auf der Abhebentaste.
Wenn das Handy des Jungen ausgeschaltet ist, kommt beim Anruf sofort seine Mobilbox.

mfg. Poseidon
 
Es muss einfach irgendeine nonblocking Function geben, die mir sagt ob der Server online ist oder nicht. Zumindest kann das der Updater den ich nachprogrammiere.

Wenn ich mein Netzwerk-kabel aussteck oder der Server gerade Wartungsarbeiten hat, kommt sofort die Meldung:
It's not service hour or time. Please check the homepage for the server condition.

Kann man prüfen ob an einer IP/Port ein Server-Daemon auf Requests wartet?
 
ja, eben, indem du zu ihm verbindest. Wenn du alle Netzwerkverbindungen deaktivierst, dann returnt connect aber auch im Millisekundenbereich.
 
Zurück