帮忙修复一个 golang 的连接问题,红包 50 元

31 天前
 logic2
问题是服务端连接断开后,或者服务端完全挂壁了之后,本地的透明代理的协程并没有关闭,且 TCP 状态还保持着,目标,服务端断开后,客户端自动断开与被代理端的 tcp 连接

https://github.com/fqdeng/x-proxy

感谢
2270 次点击
所在节点    外包
17 条回复
suruiran
31 天前
读的时候加个 buf 。定时的读一个字节,然后放到 buf 里面,用来检测连接。然后业务读都从 buf 里取,还要加个锁或者 chan 来实现同步。
676529483
31 天前
加个心跳吧
logic2
31 天前
@suruiran 佬,能直接帮忙修复一下 io.go 文件 给我看看么,我对 golang 不是很懂的
logic2
31 天前
问题大概率出在这里,看有没有办法 加入心跳连接之类的功能
https://github.com/fqdeng/x-proxy/blob/master/pkg/proxy/io.go
logic2
31 天前
@676529483 可以,我用 AI 试下,在应用层把协议改了,再加一层心跳检测
mainjzb
31 天前
io.go 文件 copyWithTimeout
再写一个 copyTCPWithTimeout ,110 行 Read 失败后,调用 dst.CloseWrite() [dst 需要改成 net.TCPConn
logic2
31 天前
@mainjzb 佬,麻烦直接提个 PR 看看
mrjnamei
31 天前
logic2
31 天前
@mrjnamei 一眼看了,AI 投递的,哈哈,测试了还是不行,服务端即使关闭的情况下,客户端还是维持了跟被代理端的 TCP 连接
zhouyin
31 天前
以外包 fix bug 类项目 50 人民币怎么够 50 只够解决很小的 css html
这种难度起码 400 美元
ZGeek
31 天前
看样子想做一个 windows 下的隧道,但是这样的东西其实已经很多了,为什么要自己开发呢?
logic2
31 天前
@ZGeek 看样子回复很多了,你为什么要发这个回复呢
ChunkitAu
30 天前
猜测: 卡在了`read`函数,设置了`SetReadDeadline`导致下一次循环还没开始,无法从`<-ctx.Done()` 退出

感觉可以在起一个协程来来单独控制连接的关闭
```
go func() {
<-ctx.Done()
src.Close()
dst.Close()
}()
```
suruiran
30 天前
怎么仓库都没了,我上午都没进去看呢……
logic2
30 天前
@suruiran #14 私有化了
logic2
30 天前
@suruiran #14 又公开了,老哥看下,后续,问题出在 conn.Fd()上面了,这个方法会影响 Conn 的后续行为
logic2
30 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1152547

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX