Aktuelle Zeit: 28.09.2020 19:50

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 29.12.2019 18:20 
Offline

Registriert: 28.12.2005 14:26
Wohnort: NRW
Hab mal etwas experimentiert, mit folgendem Ergebnis:

Immer wenn der Server gestartet wurde und keinerlei Anfragen gestellt wurden, ist der Port nach Strg-C sofort wieder frei, auch ohne CloseNetworkConnection() und CloseNetworkServer().

Sobald eine Anfrage (GET) gestellt wurde ist nach direkt danach erfolgtem Strg-C auch mit vorherigem CloseNetworkConnection(ClientID) und CloseNetworkServer(0) der Port erstmal eine Zeit blockiert.

_________________
Gruß
Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 29.12.2019 18:28 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Müssen da vielleicht noch network events abgearbeitet werden damit die Close..() auch gemacht werden?

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 31.12.2019 16:00 
Offline

Registriert: 28.12.2005 14:26
Wohnort: NRW
Folgendes Verhalten tritt unter Linux zuverlässig reproduzierbar auf:

Egal ob mit oder ohne CloseNetworkConnection(ClientID) und CloseNetworkServer(0) sowie vorigem Abarbeiten aller network events: Wenn mindestens eine Anfrage an den Server gestellt wurde,
ist der Port 80 nach Beenden des Servers für ziemlich genau 60 Sekunden blockiert (die 60 Sekunden zählen ab Beenden, nicht ab der letzten Anfrage).
Solange kann er dann nicht neu gestartet werden (alles nur unter Linux, unter Windows ist der Port immer sofort wieder frei).

Wurde der Server dagegen beendet ohne dass zuvor eine Anfrage gestellt wurde, ist der Port sofort wieder frei und der Server kann umgehend neu gestartet werden.

Für mich ist das deswegen so frustrierend, weil ich die Idee hatte, den Server von einem anderen Prozess aus zu starten, zu überwachen ob er noch ordnungsgemäß läuft und im Bedarfsfall sofort wieder neu zu starten. Das scheint nur mit 60 Sekunden Wartezeit zu gehen.

_________________
Gruß
Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 31.12.2019 16:14 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Ist unter macOS (Unix basiert) auch so...
Also 60 Sekunden warten und dann noch einmal probieren bis es klappt, oder abbrechen nach Anzahl von versuchen.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 31.12.2019 17:55 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Das Problem ist nicht Linux/Unix, sondern die Implementierung der Netzwerkfunktionen von Purebasic. Es sollte die setsockopt-Funktion aufrufen um die Flags SO_REUSEADDR und SO_REUSEPORT für den Socket zu setzen. Wenn man sich die Systemcalls von netcat anschaut, sieht man die da auch:
Code:
$ strace netcat -l 0.0.0.0 12345

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
bind(3, {sa_family=AF_INET, sin_port=htons(12345), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(3, 1)

Purebasic macht nichts mit setsockopt, deswegen kann man nicht direkt wiederverbinden.
Mit netcat kann man immer wieder starten, sich verbinden, stoppen, starten, sich verbinden, usw. ohne dass man eine Fehlermeldung bekommt.

Edit: Hab aus Versehen zuerst auf Englisch geschrieben. :freak:

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 31.12.2019 18:51 
Offline

Registriert: 28.12.2005 14:26
Wohnort: NRW
Hallo NicTheQuick,

gibt's irgendeine Möglichkeit, diese Flags zu setzen?

Das wäre echt super!

_________________
Gruß
Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 08.02.2020 19:27 
Offline

Registriert: 28.12.2005 14:26
Wohnort: NRW
Also verstehe ich das jetzt richtig: es gibt keine Möglichkeit diese Flags per Purebasic zu setzen?

_________________
Gruß
Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 08.02.2020 20:56 
Offline

Registriert: 28.12.2005 14:26
Wohnort: NRW
Könnte man nicht statt "CreateNetworkServer(0, 80)"

sowas in der Art machen:

socket_(AF_INET, SOCK_STREAM, IPPROTO_IP)
setsockopt_(3, SOL_SOCKET, SO_REUSEADDR, [1], 4)
setsockopt_(3, SOL_SOCKET, SO_REUSEPORT, [1], 4)
bind_(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("0.0.0.0")}, 16)
listen_(3, 1)

? (Jetzt mal ganz naiv gedacht)

_________________
Gruß
Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 09.02.2020 15:05 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Ja, du kannst natürlich direkt die Linux-Funktionen dafür nutzen, aber dann musst du alles mit ihnen machen, dann gehen die Purebasic-Funktionen nicht mehr. Vielleicht gibt es aber auch einen Zwischenweg, genau kann ich dir das nicht sagen, weil ich es auch nicht besser weiß.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Webserver bzw. Problem mit SendNetworkData()
BeitragVerfasst: 10.02.2020 20:55 
Offline

Registriert: 28.12.2005 14:26
Wohnort: NRW
Wenn ich das in PB so aufrufe:
Code:
socket_(AF_INET, SOCK_STREAM, IPPROTO_IP)
setsockopt_(3, SOL_SOCKET, SO_REUSEADDR, 0, 4)
setsockopt_(3, SOL_SOCKET, SO_REUSEPORT, 0, 4)
bind_(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("0.0.0.0")}, 16)
listen_(3, 1)


kommt laut strace das dabei raus:
Code:
socket(AF_UNSPEC, 0, 0)                 = -1 EAFNOSUPPORT (Address family not supported by protocol)
setsockopt(3, SOL_IP, 0 /* IP_??? */, NULL, 4) = -1 EBADF (Bad file descriptor)
setsockopt(3, SOL_IP, 0 /* IP_??? */, NULL, 4) = -1 EBADF (Bad file descriptor)
bind(3, NULL, 16)                       = -1 EBADF (Bad file descriptor)
listen(3, 1)                            = -1 EBADF (Bad file descriptor)


Was müsste man es richtig machen?

_________________
Gruß
Markus


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye