Wie viele offene Sockets hat mein Programm?

MarkP

Lieutenant
Registriert
Jan. 2016
Beiträge
632
Ich schreibe an einer Anwendung in C++, die aus Server und Client besteht und natürlich kommt da jeder Client am Server in seinen eigenen Thread.
Das Ganze läuft unter Windows, mit eingebundenem wsock32.
Während ich das Ganze code würde ich nun gerne beim Testlauf überwachen, wie viele Sockets gerade offen sind, schon um zu überprüfen, dass bei Verbindungsabbruch der betreffende Socket korrekt geschlossen wird.
Kann man programm-intern irgendwie rausfinden, wie viele offene Sockets ein Programm während der Laufzeit hat, ausser manuell bei jedem closesocket() mitzuzählen?
 
als admin ausfuehren lassen:
netstat -a -o -n -b

Ich wuerde das binaryaus deinem c++ code heraus aufrufen und die relevanten infos im Programm extrahieren.
Ich kenne windows allerdings nicht sonderlich gut..
 
Hmmmmm, ich weiss ja, dass netstat einiges an Informationen ausgibt, aber offene Sockets wüsste ich nicht.
Ich kann überprüfen an wie vielen Sockets gelauscht wird, aber nicht wie viele Sockets offen sind an denen gelauscht werden könnte, oder doch?

Mal angenommen ich mache

SOCKET StartSocket = socket(AF_INET,SOCK_STREAM,0);

dann das blabla mit port und bind() und listen() und dann in einer while-Schleife

SOCKET SubSocket = accept(StartSocket,(SOCKADDR*)&sinRemote,&nAddrSize);

dann öffnet mir die while-Schleife für jede Verbindung einen neuen Socket und gibt diesen neuen Socket an einen neuen Thread weiter.
Wenn nun dieser neue Thread "vergisst" zu lauschen und/oder bei Verbindungsabbruch den Socket nicht schliesst, oder sonst irgendwas schief geht, dann hängt dieser offene Socket im System, was natürlich auf die Dauer zu immer mehr offenen Sockets führen würde.
Ob und wie viele solche offenen aber ungenutzten Sockets mein Programm hat kann ich (meines Wissens) mit netstat nicht rausfinden, oder?
 
  • Gefällt mir
Reaktionen: MarkP
Hey, das hilft doch mal.
Muss ich mir genauer anschauen, aber ich danke schon mal herzlichst.
 
Zurück
Oben