XX-net/XX-Net · warning

put_send_data %s conn:%d seq:%d next:%d

Error message

put_send_data %s conn:%d seq:%d next:%d

What it means

put_cmd_data received a data chunk whose sequence number is older than next_cmd_seq, i.e. a duplicate/late packet; it is dropped. The log shows session, conn, the stale seq and the expected next seq.

Source

Thrown at code/default/x_tunnel/local/base_container.py:712

            # record TCP connection time
            # conn_time = time.time() - start_time
            # self.xlog.debug("tcp conn %s %s time:%d", host, ip, conn_time * 1000)

            return sock, True
        except Exception as e:
            conn_time = int((time.time() - start_time) * 1000)
            self.xlog.debug("tcp conn host:%s %s:%d fail t:%d %r", host, ip, port, conn_time, e)
            if sock:
                sock.close()
            return e, False

    def put_cmd_data(self, data):
        if not self.running:
            return

        seq = struct.unpack("<I", data.get(4))[0]
        if seq < self.next_cmd_seq:
            self.xlog.warn("put_send_data %s conn:%d seq:%d next:%d",
                           self.session.session_id, self.conn_id,
                           seq, self.next_cmd_seq)
            return

        self._debug_log("conn:%d put data seq:%d len:%d", self.conn_id, seq, len(data))

        with self._lock:
            self.cmd_queue[seq] = data.get_buf()
            if seq == self.next_cmd_seq:
                if self.sock:
                    self.connection_pipe.add_sock_event(self.sock, self, selectors.EVENT_WRITE)
                else:
                    self.process_cmd()

    def get_cmd_data(self):
        if self.next_cmd_seq not in self.cmd_queue:
            self._debug_log("get_cmd_data conn:%d no data, next_cmd_seq:%d", self.conn_id, self.next_cmd_seq)
            return None

View on GitHub (pinned to cfa5bc17b6)

Solutions

  1. No action needed for occasional drops
  2. If frequent, increase retransmit timeout to avoid premature retries
  3. Check for duplicate delivery paths
Defensive patterns

Strategy: validation

Prevention

When it happens

Trigger: Server resends a chunk (seq < next_cmd_seq) after a retry was already satisfied; duplicates arrive via multiple fronts.

Common situations: Retransmission race: retry arrived after original was processed; harmless data-drop path.

Related errors


AI-assisted analysis of XX-net/XX-Net@cfa5bc17b6 (2026-08-27). Data as JSON: /api/errors/06d2389a14b3b621. Report an issue: GitHub.