You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux TCP客户端数据滞留发送队列问题排查咨询

TCP客户端send buffer数据滞留问题排查求助

在Linux环境下作为TCP客户端发送数据时,偶尔会出现write操作执行成功,但数据滞留在send buffer中,直至receive timeout才发出的现象。该结论基于tcpdump抓包结果及卡顿期间采集的SendQ大小数据。当前Socket配置为阻塞发送模式,已启用NODELAY标志,服务端为老式SLIP设备。

补充测试信息:

  • 单独针对该异常连接开展通信测试时,系统无其他程序运行,200万次通信均无异常;
  • 系统整体运行时问题出现,已采集系统资源利用率数据,显示CPU、内存资源充足,怀疑问题由系统或网络繁忙导致。

现寻求该问题的排查手段。

发送函数代码

erpc_status_t TCPTransport::underlyingSend(const uint8_t *data, uint32_t size, void *arg)
{
    int socket = (NULL == arg) ? m_socket : *(int *)arg;
    if (socket < 0)
    {
        return kErpcStatus_InvalidArgument;
    }

    // Loop until all data is sent.
    while (size)
    {
#ifndef WIN32
        ssize_t result = write(socket, data, size);
#else
        int result = send_Data(socket, (char *)data, size, 0);
#endif
        if (result >= 0)
        {
            size -= result;
            data += result;
        }
        else
        {
            if (errno == EPIPE)
            {
                // Server closed.
                //close();
                TCP_DEBUG_ERR("underlyingSend() connect closed.");
                return kErpcStatus_ConnectionClosed;
            }
            TCP_DEBUG_ERR("underlyingSend() send failed.");
            return kErpcStatus_SendFailed;
        }
    }

    return kErpcStatus_Success;
}

内容的提问来源于stack exchange,提问作者Consen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:51:17