kill the socket :D



  • Hallo,

    Also ich habe ein Client und ein Server.
    Ein Server öffnet mir einen listening socket über Port 9998 und der client connect darauf in einer unendlich schleife mit einem abstand von 2 sekunden. nachdem der server den verbindungswunsch des clients akzeptiert hat schließt er den socket mit close(socket);

    das problem ist:
    netstat -ano | grep 9998

    tcp        0      0 192.168.1.252:9998      192.168.1.252:60690     FIN_WAIT2  timewait (50.86/0/0)
    tcp        1      0 192.168.1.252:60667     192.168.1.252:9998      CLOSE_WAIT off (0.00/0/0)
    tcp        0      0 192.168.1.252:9998      192.168.1.252:60700     FIN_WAIT2  timewait (58.86/0/0)
    tcp        1      0 192.168.1.252:60672     192.168.1.252:9998      CLOSE_WAIT off (0.00/0/0)
    tcp        0      0 192.168.1.252:9998      192.168.1.252:52667     FIN_WAIT2  timewait (14.85/0/0)
    tcp        1      0 192.168.1.252:60696     192.168.1.252:9998      CLOSE_WAIT off (0.00/0/0)
    tcp        0      0 192.168.1.252:9998      192.168.1.252:52666     FIN_WAIT2  timewait (12.85/0/0)
    tcp        1      0 192.168.1.252:60674     192.168.1.252:9998      CLOSE_WAIT off (0.00/0/0)
    

    netstat -ano |grep 9998 |wc

    142    1136   13518
    

    1ne Minute später das gleiche
    netstat -ano |grep 9998 |wc

    159    1272   15111
    

    mir kommt es so vor, dass sich die Dinger ansammeln 😃
    Mach ich was falsch bzw. muss ich den socket sonst wie "killen"?

    Danke für die Hilfe
    LG



  • Kannst du diese Linuxkauderwelsch auch in deutsch übersetzen?

    Gibts auch C++ Code?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • also dein code wäre überaus hilfreich. kann mir da jetzt nicht viel drunter vorstellen.

    blan



  • Hi,
    Unter linux ist das normal das der Listen port noch offen ist,
    Normalerweise sollte er dann nach ein bis zwei minuten zu gehen.

    MFG ReduX



  • Hallo,

    also eigentlich muss eine tcp-Verbindung erst heruntergefahren werden. Bedeutet: es muss ein FIN gesendet werden. Das sollte derjenige, der die Verbindung abbaut mit einem "shutdown()" generieren. Die Gegenstelle sollte dann ihrerseits mit einem FIN antworten. Das kriegt man mit, wenn man ein finales read durchführt und dieses ohne Daten, also ohne Fehler, aber mit der Länge 0 zurückkehrt. Dann darf man die Verbindung mit close() schließen.

    Allerdings geht die einfache close()-Variante auch. Dann übernimmt der Kernel das herunterfahren. Der wartet aber, wenn ich das richtig in Erinnerung habe, auf einen Timeout.

    Hoffe ich konnte dir helfen.

    Grüße - Yorn



  • Schau Dir mal unter der man-page socket(7) die Option SO_REUSEADDR an. Vielleicht ist es das, was Du brauchst.

    Tntnet


Anmelden zum Antworten