![]() |
UDP Port bleibt nach Programmende in Benutzung
Hallo zusammen,
wir haben hier ein seltsames Phänomen. Wir haben es mit Indy und ICS ausprobiert, es ist bei beiden Frameworks das gleiche Resultat. Wir benutzen einen UDP Server um dort Pakete hinzuschicken. Wenn das Programm aber beendet wird, bleibt der Port geöffnet. Laut Process Explorer und netstat in "System", nicht mehr in der (ja auch schon geschlossenen) Anwendung. Beim nächsten Start der Anwendung kann der Port nun nicht mehr benutzt werden, klar. Komisch ist, dass es beim zweiten Start dann aber in der Regel geht. Danach ist der Port nämlich plötzlich nicht mehr vom System in Benutzung. Eine offene VPN Verbindung scheint das Problem zu begünstigen, es ist aber auch schon ohne aufgetreten. Hat dieses Phänomen schon einmal jemand gehabt? Hat jemand Ideen, vielleicht sogar eine Lösung? Vielen Dank, schönen Gruß, Sebastian |
AW: UDP Port bleibt nach Programmende in Benutzung
Schon mal probiert, den Port im Programm zu schließen und wieder zu öffnen? Und was sagt Netstat, wann du den Port im Programm nur schließt (also nicht mit Programmende)?
Wird bei Programmende der Port richtig geschlossen (auch erfolgreich geschlossen) und alles aufgeräumt? Wie sieht die Prozedure zum Öffnen des Ports aus, bzw. was machst du wenn der Port nicht geöffnet werden kann? |
AW: UDP Port bleibt nach Programmende in Benutzung
Eigentlich sieht alles gut aus, wenn man das so simuliert.
Aber:
// EDIT: Erneute Versuche nach kurzer Verzögerung den Port erneut zu aktivieren schlagen ebenfalls fehl. // EDIT2: Längere Verzögerung scheint zu gehen (20 Sekunden). Aber das Problem scheint auch weg zu sein, wenn ich als Broadcastadresse nicht 255.255.255.255 benutze, sondern z.B. 192.168.1.255, sprich nur in das einzelne Subnetz gezielt broadcaste. Heißt aber auch, dass diese Adresse bei jedem Kunden konfiguriert werden muss... |
AW: UDP Port bleibt nach Programmende in Benutzung
Okay, dass du mit
Zitat:
Zitat:
Des Weiteren könntest du ja bei beim Öffnen des Ports auf Erfolg prüfen, und das in einer Schleife eine gewisse Zeit wiederholen, bis es halt klappt. |
AW: UDP Port bleibt nach Programmende in Benutzung
Zitat:
Wiederholen alleine scheint auch nicht zu gehen, aber ich habe eben beobachtet, dass es offenbar nach einem Broadcast klappte, sprich Windows den Socket geschlossen hat. Vielleicht hängt der Socket einfach so lange bis etwas ankommt oder ein Timeout auftritt... Die IP lässt sich schlecht automatisch bestimmen, denn es sind ja mehrere Netzwerkadapter aktiv, LAN, VPN, LTE, ... Welcher dann der richtige ist... das kann ich zwar versuchen über den Typ der Verbindung usw., aber ob das dann immer stimmt? |
AW: UDP Port bleibt nach Programmende in Benutzung
Konntest du dieses Verhalten mal mit einem kleinen Testprojekt nachstellen? Vielleicht eines, was du hier posten kannst?
|
AW: UDP Port bleibt nach Programmende in Benutzung
Nein, konnte ich nicht.
Ich habe es nun aber nach stundenlanger Suche herausgefunden wann der Port offen bleibt auf diese Weise... Und zwar startet die Anwendung weitere Toolprogramme. Sobald ein solches Tool nach dem Ende des Programms noch offen ist, bleibt der Port im System belegt. Ich vermute einmal, das liegt daran, dass Handles ggf. an Kindprozesse übergeben werden können, und somit bis zu deren Ende verwendet werden könnten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz