Skip to content

πŸ› BUG: WebSocket without Durable Object stays in CLOSING state after closeΒ #2569

@RaresAil

Description

@RaresAil

Which Cloudflare product(s) does this pertain to?

Workers Runtime

What version(s) of the tool(s) are you using?

3.58.0 [Wranger]

What version of Node are you using?

22.2

What operating system and version are you using?

macOS Sonoma 14.5

Describe the Bug

Observed behavior

When closing the connection from the client, the server stays in COLOSING for more than 40s

Expected behavior

To change the state to CLOSED

Steps to reproduce

Please provide the following:

Follow the steps for the server here: https://developers.cloudflare.com/workers/examples/websockets/ and run it from postman, and on the close event watch for the readyState which stays on CLOSING for more than 40s and the postman is on Disconneting for 30s and after an error is thrown with No closing frame

Example code:

const upgradeHeader = c.req.header('Upgrade');
    if (!upgradeHeader || upgradeHeader !== 'websocket') {
      return new Response('Expected Upgrade: websocket', { status: 426 });
    }

    const webSocketPair = new WebSocketPair();
    const client = webSocketPair[0];
    const server = webSocketPair[1];

    server.accept();

    server.addEventListener(
      'close',
      (e) => {
        console.log('close', e, server.readyState);
        setTimeout(() => console.log(server.readyState), 5000);
      },
      {
        once: true
      }
    );

    server.addEventListener(
      'error',
      (e) => {
        console.log('error', e, server.readyState);
      },
      {
        once: true
      }
    );

    server.addEventListener('message', (e) => {
      console.log(e);
    });

    return new Response(null, {
      status: 101,
      webSocket: client
    });
    ```


### Workaround

To call again .close in the close event handler and suppress the connection lost error


### Please provide a link to a minimal reproduction

_No response_

### Please provide any relevant error logs

Error from postman after 30s: 1006 Abnormal Closure: No close frame was received.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions