Skip to content

Commit

Permalink
fix(ext/websocket): extra ws pongs sent (denoland#17762)
Browse files Browse the repository at this point in the history
Fixes denoland#17761

Tugstenite already sends a pong for a recieved ping. This automatically
happens when the socket read is being driven. From
snapview/tokio-tungstenite#88

> You need to read from the read-side of the socket so that it
receives/handles pings, and on the next write it would then send the
corresponding pong.

Here's the source:


https://github.com/snapview/tungstenite-rs/blob/e1033afd959bb7abfcbc181033b8326f8a40562b/src/protocol/mod.rs#L374-L380

```rust
// Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in
// response, unless it already received a Close frame. It SHOULD
// respond with Pong frame as soon as is practical. (RFC 6455)
if let Some(pong) = self.pong.take() {
  trace!("Sending pong reply");
  self.send_one_frame(stream, pong)?;
}
```

WIth this patch, all Autobahn tests from 1-8 pass. Fixed cases: 2.1,
2.2, 2.3, 2.4, 2.6, 2.9, 2.10, 2.11, 5.6, 5.7, 5.8, 5.19, 5.20

To run the test yourself, follow
https://www.notion.so/denolandinc/Autobahn-WebSocket-testsuite-723a86f450ce4823b4ef9cb3dc4c7869?pvs=4
  • Loading branch information
littledivy committed Feb 13, 2023
1 parent f80a1fa commit 9e3d433
Showing 1 changed file with 0 additions and 6 deletions.
6 changes: 0 additions & 6 deletions ext/websocket/01_websocket.js
Original file line number Diff line number Diff line change
Expand Up @@ -433,12 +433,6 @@ class WebSocket extends EventTarget {
this.dispatchEvent(event);
break;
}
case "ping": {
core.opAsync("op_ws_send", this[_rid], {
kind: "pong",
});
break;
}
case "pong": {
this[_serverHandleIdleTimeout]();
break;
Expand Down

0 comments on commit 9e3d433

Please sign in to comment.