socket.writable.getWriter().write() hangs at 7th write

hello, i have a Cloudflare Workers to act like a "server ping service" using cloudflare:sockets. Below is my code for pinging an IP address using sockets, with
amount
time, and
server
is the WebSockets Server connected to client for sending back the ping data:
const pingServer = async () => {
  for (let i = 0; i < amount; i++) {
    try {
      server.send(JSON.stringify({ message: "connecting" }));
      const start = Date.now();
      const socket = await connect({
        hostname: ip,
        port,
      });
      server.send(JSON.stringify({ message: "connected, getting writer" }));
      const writer = socket.writable.getWriter()
      const randomData = new Uint8Array(32);
      crypto.getRandomValues(randomData);

      server.send(JSON.stringify({ message: `operation ${i+1}, writing data ${randomData}` }));
      await writer.write(randomData);
      server.send(JSON.stringify({ message: "data written, waiting for read" }));

      // Read with a timeout
      const delay = await Promise.race([
        (async () => {
          await socket.readable.getReader().read();
          return Date.now() - start;
        })(),
        new Promise((_, reject) =>
          setTimeout(() => reject(new Error("Timed out")), timeout)
        ),
      ]);

      server.send(JSON.stringify({ success: true, delay: delay }));
      server.send(JSON.stringify({ message: "closing connection" }));
      socket.close();
      server.send(JSON.stringify({ message: "connection closed" }));
      
    } catch (err) {
      server.send(
        JSON.stringify({ success: false, delay: -1, error: err.message })
      );
    }
    
    await new Promise((resolve) => setTimeout(resolve, timeout));
  }
  
  server.close();
};


however, at the await writer.write(randomData);, this always hang at 7th operation and I don't know why. can someone help me with this?
chrome_yVTuGCfnl6.png
Was this page helpful?