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

async-std::net::TcpStream读取函数有数据却不返回的问题排查

async-std TcpStream 跨大西洋连接挂起问题排查

我正在调试一个已持续数日的异常问题,代码中使用async-std::net::TcpStream,核心逻辑如下:

// 初始化socket与连接
let socket = std::net::SocketAddrV4::new(addr, port);
let stream = async_std::net::TcpStream::connect(socket).await?;

// 获取读写对象
let mut reader = stream.clone();
let mut writer = stream;

// 启动写入任务
async_std::task::spawn(async move {
            Self::start_writer(&mut writer, cmd_rx, username, password, price_modify).await
        });

// 初始化缓冲区
let mut buffer = bytes::BytesMut::with_capacity(8*1024);

// 循环读取并处理数据
 loop {
     println!("Read start");
     let n = reader.read(&mut buffer).await?;
    println!("Read end");

    // 处理读取到的数据
}

异常现象

  • 这段代码此前数月在多个连接场景下稳定运行,但连接位于纽约的新服务器后,会随机在数秒至数分钟后挂起,始终停在read调用处——仅打印"Read start",不会输出"Read end"。
  • 通过Wireshark抓包可见有数据包传入,但TCP接收窗口持续减小直至归零。
  • 问题存在时序相关性:添加大量调试打印语句时,程序可运行更久甚至不出现挂起。
  • 将async-std::net::TcpStream替换为标准库的std::net::TcpStream后,一切正常。

连接差异

新旧连接仅存在网络路径差异:新连接为伦敦到纽约的直连,旧连接通过伦敦本地中继,数据类型与连接逻辑完全一致。

疑问与排查请求

请问这是否属于async-std的Bug?有哪些可行的后续排查思路?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:20:01