Skip to content

v3 and v4 close socket if more than 1MB is sent (but v2 is fine) #3946

@Domiii

Description

@Domiii

Describe the bug

  • Everytime a certain amunt of data is sent by the client, the socket disconnects instantly.
  • I am using [email protected]
  • Client in browser (latest Chrome)
  • Server on Node@16

Steps to reproduce

  • Connect to server
  • Let client send a packet that is at least 1e6 in size (code sample below)
  • You will see it disconnect instantly.

Code Sample

Socket.IO server version: 4.1.2

Server

import { Server } from "socket.io";

const io = new Server(3000, {});

io.on("connection", (socket) => {
  console.log(`connect ${socket.id}`);

  socket.on("disconnect", () => {
    console.log(`disconnected ${socket.id}`);
  });

  socket.on("noop", (data) => {
    console.log(`noop received: ${data.length}`);
  });
});

Socket.IO client version: 4.1.2

Client

import { io } from "socket.io-client";

const socket = io("ws://localhost:3000/", {});

socket.on("connect", () => {
  console.log(`connect ${socket.id}`);

  // NOTE: if you change N to 999000, it will NOT disconnect!
  const N = 1e6;
  const noopData = new Array(N).fill(1).join('');
  socket.emit('noop', noopData);
  console.warn(`noop sent, N=${N}`);
});

socket.on("disconnect", () => {
  console.log("disconnect");
});

Expected behavior

Don't disconnect arbitrarily.

Platform:

  • Device: PC
  • OS: Windows10

Further Analysis

  • I find the issue to also exist in socket.io@3, but not in socket.io@2, which works just fine.
  • I debugged the issue and found that N=1e6 will disconnect, while N=999000 will NOT disconnect.
    • That seems to indicate that whatever bug it is, it is largely tied to some sort of 1MB quota.
  • When putting a breakpoint in the onClose handler in ./node_modules/engine.io-client/lib/transports/websocket.js, you can debug the native WebSocket error event (which is in arguments[0]).
    • It's code is 1005.
    • According to MDN, code 1005 - "Indicates that no status code was provided even though one was expected."

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions