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
相关产品推荐
相关产品推荐

