说说 github.com/pkg/sftp 与 TCP stall

好久没写过东西了,最近一直在折腾 Golang,今天难得想起来了,就稍微写一点。

最近有个需求,要通过 SFTP 把文件传到指定服务器上,于是就用了 github.com/pkg/sftp 这么一个库。然而,这个库存是存在一些坑的,比如某个版本 sftp.File.Write 写超过 4MiB 的文件时,Kill 远程 sshd 后会导致 Close 时死锁;又比如更新代码后,Kill 了远端之后有时 ReadFrom 返回 Writer EOF,有时返回 nil;再比如模拟弱网时发生了 TCP Stall,传输就永远的卡死了,如果此时对端认为 TCP 超时,则该 TCP 将永远不会被释放。

继续阅读“说说 github.com/pkg/sftp 与 TCP stall”