{"record":{"id":"5cad119a59b7c64c","repo":"XX-net/XX-Net","slug":"roundtrip-time-f-transfer-no-d-send-d-recv-d-u","errorCode":null,"errorMessage":"roundtrip time:%f transfer_no:%d send:%d recv:%d unpack_error:%s","messagePattern":"roundtrip time:(.+?) transfer_no:(.+?) send:(.+?) recv:(.+?) unpack_error:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/x_tunnel/local/proxy_session.py","lineNumber":994,"sourceCode":"                magic, version, pack_type = struct.unpack(\"<cBB\", payload.get(3))\n                if magic != b\"P\" or version != g.protocol_version or pack_type not in [2, 3]:\n                    xlog.warn(\"get data head:%s\", utils.str2hex(content[:2]))\n                    data_info[\"stat\"] = \"timeout\"\n                    time.sleep(sleep_time)\n                    continue\n\n                if pack_type == 3:  # error report\n                    error_code, message_len = struct.unpack(\"<BH\", payload.get(3))\n                    message = payload.get(message_len)\n                    # xlog.warn(\"report code:%d, msg:%s\", error_code, message)\n                    if error_code == 1:\n                        # no quota\n                        xlog.warn(\"x_server error:no quota\")\n                        self.stop()\n                        return\n                    elif error_code == 2:\n                        # unpack error\n                        xlog.warn(\"roundtrip time:%f transfer_no:%d send:%d recv:%d unpack_error:%s\",\n                                  roundtrip_time, transfer_no, send_data_len, len(content), message)\n                        data_info[\"stat\"] = \"timeout\"\n                        continue\n                    elif error_code == 3:\n                        # session not exist\n                        if self.session_id == request_session_id:\n                            xlog.warn(\"server session_id:%s not exist, reset session.\", request_session_id)\n                            self.reset()\n                        return\n                    else:\n                        xlog.error(\"unknown error code:%d, message:%s\", error_code, message)\n                        time.sleep(sleep_time)\n                        continue\n\n                server_time, time_cost, server_send_pool_size, data_len, ack_len, rcvd_no_len, sent_no_len, unack_snd_sn_len, ext_len \\\n                    = struct.unpack(\"<dIIIIIIII\", payload.get(40))\n                head_len = (content_len - data_len - ack_len - rcvd_no_len - sent_no_len - unack_snd_sn_len - ext_len)\n                if head_len < 3 + 40:","sourceCodeStart":976,"sourceCodeEnd":1012,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/proxy_session.py#L976-L1012","documentation":"Server error-report with error_code 2: the server could not unpack the request data for the given transfer number. The transfer's data_info is marked 'timeout' and the roundtrip loop continues with other transfers.","triggerScenarios":"Corrupted or truncated request payload (network corruption), protocol/library version mismatch between client and server unpackers, or oversized payloads exceeding server limits.","commonSituations":"Flaky connections corrupting frames, client/server version skew after partial upgrade, or compression/buffer boundary bugs.","solutions":["Update XX-Net client so pack/unpack logic matches the server version","Retry the request — transient corruption marks only this transfer as timeout","Check network stability (packet loss, middleboxes mangling TLS/stream)","Report with the logged transfer_no and send/recv lengths if persistent"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep client and server versions in sync","Retry transfers marked 'timeout' — single unpack errors are transient","Report persistent unpack errors with transfer_no from logs"],"tags":["x-tunnel","unpack","protocol","corruption"],"backgroundTag":"payload-decode-failed","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}