websocket.close von Client-Seite => Statuscode 1006 (closed abnormally)

Begonnen von Thorsten Pferdekaemper, 22 Oktober 2019, 21:51:24

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
wenn ich einen WebSocket mit einer FHEMWEB-Instanz schließe, dann liefert mir das auf der Client-Seite im onclose-Event immer Statuscode 1006 ("The connection was closed abnormally, e.g., without sending or receiving a Close control frame"), egal was ich dem close() mitgebe.
Soweit ich das verstanden habe, müsste ich aber entweder das zurück bekommen, was ich im close() mitgebe oder zumindest 1000 oder 1005.
Wenn ich mir das Coding in FHEMWEB ansehe, dann scheint es mir so, dass FHEMWEB auf einen close-Opcode gar nichts antwortet. Eigentlich müsste es aber selbst wieder einen close control frame zurückschicken. (Wenn FHEMWEB nicht selbst das Schließen auf Server-Seite initiiert hat.)
Siehe auch
https://tools.ietf.org/html/rfc6455#section-5.5.1
https://tools.ietf.org/html/rfc6455#section-7.4

Ist meine Beobachtung korrekt? Falls ja, wäre es sehr aufwändig, das zu ändern?

Gruß,
   Thorsten
FUIP

rudolfkoenig

Das websocket Protokoll wird mir zunehmend unsympatisch, bin mit etlichen Entscheidungen nicht einverstanden.

Ich habe jetzt eine Zeile beim Close hinzugefuegt:      TcpServer_WriteBlocking($hash, pack("CCNn",0x88,0x82,0,1000));
was strenggenommen immer noch nicht perfekt ist, da die verwendete Maske (0) nicht wirklich "derived from a strong source of entropy" ist.

Bin gespannt, ob die Implementierung der anderen Seite das auch bemaengelt.
Und ob ich das Paket so richtig zusammengebaut habe.

Thorsten Pferdekaemper

Ich habe das mal ausprobiert:

failed: A server must not mask any frames that it sends to the client.

Gruß,
   Thorsten
FUIP

rudolfkoenig

Dann versuch es mal mit:      TcpServer_WriteBlocking($hash, pack("CCn",0x88,0x2,1000));
Um die Schleife abzukuerzen: kannst du ein Testporgramm zeigen?

Thorsten Pferdekaemper

Zitat von: rudolfkoenig am 23 Oktober 2019, 15:43:48
Dann versuch es mal mit:
      TcpServer_WriteBlocking($hash, pack("CCn",0x88,0x2,1000));
Ja, das ist besser. Da bekomme ich ein...

1000 Normal closure, meaning that the purpose for which the connection was established has been fulfilled.

Ich denke, dass das so ok ist

Zitat
Um die Schleife abzukuerzen: kannst du ein Testporgramm zeigen?
Das wäre für mich momentan recht aufwändig, aber ich glaube, dass es auch nicht mehr notwendig ist.

Nur eins vielleicht noch: Sendet FHEMWEB als Server auch irgendwann von sich aus ein close? In dem Fall würdest Du ja auch von der Gegenstelle ein close als Antwort bekommen und darauf dann auch wieder antworten. Das wäre nicht so gut. Ich weiß allerdings momentan nicht, wie ich das testen sollte, da ich nicht weiß, ob und wie man FHEMWEB dazu bringen kann, von seiner Seite aus die Verbindung schließen zu wollen.

Gruß,
   Thorsten
FUIP

rudolfkoenig

ZitatSendet FHEMWEB als Server auch irgendwann von sich aus ein close?
Nein, FHEMWEB schliesst einfach die Verbindung, aber nur bei delete oder shutdown.
Programme sollten sich mAn nicht mit aufwendigen Abschiedszeremonien aufhalten.

Thorsten Pferdekaemper

Zitat von: rudolfkoenig am 23 Oktober 2019, 19:48:51
Nein, FHEMWEB schliesst einfach die Verbindung, aber nur bei delete oder shutdown.
Ok, dann haben wir das Problem schonmal nicht.

Zitat
Programme sollten sich mAn nicht mit aufwendigen Abschiedszeremonien aufhalten.
Das kann man so sehen. In meinem Fall hatte ich halt die Verbindung explizit geschlossen und dann eine Fehlermeldung bekommen. Ich hatte eine ganze Weile gebraucht, bis ich kapiert hatte, wo das herkommt. Das hätte ich mir sparen können.

Danke jedenfalls für die Änderung.

Gruß,
   Thorsten
FUIP