AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi UDP Port bleibt nach Programmende in Benutzung
Thema durchsuchen
Ansicht
Themen-Optionen

UDP Port bleibt nach Programmende in Benutzung

Ein Thema von jaenicke · begonnen am 7. Jul 2015 · letzter Beitrag vom 8. Jul 2015
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#1

UDP Port bleibt nach Programmende in Benutzung

  Alt 7. Jul 2015, 09:58
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
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#2

AW: UDP Port bleibt nach Programmende in Benutzung

  Alt 7. Jul 2015, 10:30
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: UDP Port bleibt nach Programmende in Benutzung

  Alt 7. Jul 2015, 14:56
Eigentlich sieht alles gut aus, wenn man das so simuliert.

Aber:
  • Wenn die VPN Verbindung verloren geht während der Port reserviert ist, kann er nicht mehr freigegeben werden
  • Wenn die Anwendung z.B. per Taskmanager abgeschossen wird oder ein Fehler auftritt, so dass die Deinitialisierung nicht durchlaufen wird, räumt Windows den Port nicht auf
  • Wenn der Port unter deutlicher Last liegt und in dem Moment der Freigabe Datenpakete ankommen, wird er nicht aufgeräumt trotz Freigabe durch die Anwendung
Ich halte das für einen Fehler in Windows. Wie ich das lösen soll habe ich aktuell keine Ahnung.

// 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...
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 7. Jul 2015 um 15:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: UDP Port bleibt nach Programmende in Benutzung

  Alt 7. Jul 2015, 16:10
Okay, dass du mit
Wenn das Programm aber beendet wird, bleibt der Port geöffnet.
von außen beendet meinst, dass hatte ich daraus nicht gelesen.

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...
Naja, den Netzwerkteil der IP-Adresse könntest du ja aus der IP-Adresse des Clients herauslesen, um deine Broadcastadresse zu bilden.

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.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: UDP Port bleibt nach Programmende in Benutzung

  Alt 7. Jul 2015, 17:53
Okay, dass du mit
Wenn das Programm aber beendet wird, bleibt der Port geöffnet.
von außen beendet meinst, dass hatte ich daraus nicht gelesen.
Nicht immer, aber so lässt es sich am besten reproduzieren. Im echten Betrieb war das nicht so, zumindest nicht immer.

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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: UDP Port bleibt nach Programmende in Benutzung

  Alt 7. Jul 2015, 18:18
Konntest du dieses Verhalten mal mit einem kleinen Testprojekt nachstellen? Vielleicht eines, was du hier posten kannst?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: UDP Port bleibt nach Programmende in Benutzung

  Alt 8. Jul 2015, 15:12
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz