大家有AI一顿搞,根本没解决问题,果然AI不是万能的
最后我试了一下socks5是没问题的,问题只可能出在获取src地址的调用上了 把这段代码 让qwen3-coder看了下
https://github.com/fqdeng/x-proxy/blob/master/pkg/proxy/transparent_linux.go
fd := file.Fd()
这个会对文件描述符进行复制,复制后 Conn的行为会异常,导致Conn无法关闭,最终协程无法退出
潜在影响:会严重影响 Conn 关闭! 问题所在: tcpConn.File() 会复制文件描述符 这个操作会将 TCP 连接的文件描述符复制给一个新的 *os.File 但原始的 net.Conn 仍然持有该连接 file.Close() 只关闭复制的文件描述符 当你调用 file.Close() 时,只是关闭了复制的 fd 原始的 net.Conn 仍然可以正常使用 但是!这会破坏连接的状态 在某些系统上,复制 fd 后再关闭它,可能会影响原始连接的行为 特别是在透明代理场景下,可能影响后续的数据传输
![]() |
1
suruiran 7 天前
读的时候加个 buf 。定时的读一个字节,然后放到 buf 里面,用来检测连接。然后业务读都从 buf 里取,还要加个锁或者 chan 来实现同步。
|
![]() |
2
676529483 7 天前
加个心跳吧
|
![]() |
4
logic2 OP 问题大概率出在这里,看有没有办法 加入心跳连接之类的功能
https://github.com/fqdeng/x-proxy/blob/master/pkg/proxy/io.go |
![]() |
6
mainjzb 7 天前
io.go 文件 copyWithTimeout
再写一个 copyTCPWithTimeout ,110 行 Read 失败后,调用 dst.CloseWrite() [dst 需要改成 net.TCPConn |
8
mrjnamei 7 天前
|
10
zhouyin 7 天前
以外包 fix bug 类项目 50 人民币怎么够 50 只够解决很小的 css html
这种难度起码 400 美元 |
![]() |
11
ZGeek 7 天前
看样子想做一个 windows 下的隧道,但是这样的东西其实已经很多了,为什么要自己开发呢?
|
![]() |
13
ChunkitAu 7 天前
猜测: 卡在了`read`函数,设置了`SetReadDeadline`导致下一次循环还没开始,无法从`<-ctx.Done()` 退出
感觉可以在起一个协程来来单独控制连接的关闭 ``` go func() { <-ctx.Done() src.Close() dst.Close() }() ``` |
![]() |
14
suruiran 6 天前
怎么仓库都没了,我上午都没进去看呢……
|