Seite 1 von 1

Thread Frage

Verfasst: Mittwoch 14. Dezember 2016, 12:04
von DMD-OL
hey
ich hab da mal noch eine frage:
in einem standard server code mit while true, accept(), client.close() und socket.close() ist socket.close()
nur in verbindung mit einem timeout() (oder ähnlichem) von nutzen, oder? sonst läuft doch immer accept() und
der socket bleibt sowieso geöffnet. stimmt das?
und noch eine viel wichtigere frage:
wieso kann man threads nicht komplett zerstören?
sonst kann man sich an alten serververbindungen, die schon einmal über einen thread gestartet wurden, immer wieder anmelden, obwohl die alt sind.

Re: Thread Frage

Verfasst: Mittwoch 14. Dezember 2016, 12:22
von BlackJack
@DMD-OL: Man könnte auch eine Nachricht vorsehen die man dem Server schicken kann und die ihm sagt er soll sich beenden. Die muss nicht von einem entfernten Client kommen, sondern kann auch aus einem anderen Thread beim Server kommen. Und da die sich Daten teilen können, kann die Nachricht auch ein bei jedem Serverstart zufällig erzeugtes ”Geheimnis” enthalten, damit nicht irgendwelche Clients den Server einfach so beenden können.

Das Zerstören von Threads kann den Programmzustand zerstören. Und was nützt einem ein Programm in einem inkonsistenten Zustand‽ So etwas nicht-kooperativ sauber hinzubekommen ist halt nicht einfach. Und selbst wenn das für einen Bytecode-Interpreter vielleicht noch teilweise hinzubekommen wäre, setzt Python so einen ja nicht voraus.