Winsock: Listen() Frage
-
Ich habe ein kleines winsock programm geschrieben das mit tcp sockets arbeitet.
Es gibt Server und Client.Dabei habe ich folgendes Problem:
Ich möchte auf dem Server solange das socket noch im listen modus ist eine while schleife ausführen, aber ich weiß nicht wie, hat listen einen bestimmten wert solange der client nochnicht mit ihm verbunden ist, oder wie kann ich das realisieren ?
-
Das Serversocket bleibt im "Listen Modus", wenn ein Client verbindet. Du bekommst für jeden Client nämlich mit accept ein neues Socket erstellt.
Edit:
Nur das accept muss also in die Schleife...
-
hehe ich weiß wie eine Verbindung von statten geht danke, das will ich aber nicht wissen. Ich möchte z.b. solange das socket im listen modus ist printf("das ist in der whileschleiße"); wiederholt ausgeben bis das socket mit accept aus dem blocking call (listen) "rauskommt".
-
listen() ist doch kein blocking call
-
Listener schrieb:
Ich möchte z.b. solange das socket im listen modus ist printf("das ist in der whileschleiße"); wiederholt ausgeben bis das socket mit accept aus dem blocking call (listen) "rauskommt".
der socket bleibt im listen modus. auch nachdem eine verbindung aufgebaut wurde. du kannst sowas z.b. mit non-blocking sockets und 'select' oder mit 2 threads machen,
so ähnlich etwa...bool connected = false; // thread 1 listen(...) for (;;) { accept(...) connected = true; // verbindung abhandeln ... ... shutdown(...); closesocket(...); connected = false; } // thread 2 ... for (;;) { if (connected) { // mach was bei verbindung } else { // mach was bei keiner verbindung } }