GithubHelp home page GithubHelp logo

ehco1996 / ehco Goto Github PK

View Code? Open in Web Editor NEW
1.1K 13.0 197.0 1.78 MB

ehco is a network ʚrelayɞ tool and a typo :)

Home Page: https://docs.ehco-relay.cc/

License: GNU General Public License v3.0

Go 86.76% Dockerfile 0.17% Makefile 1.37% Shell 4.33% HTML 7.37%
relay echo

ehco's Introduction

Ehco1996 ✈️

很多同学会把 ehco 看成 echo , 事实上起名字那会是想叫 echo 的,因为高中时看了很多三毛(echo)的书

但因为我经常会把文字的序顺看错 :) 所以没错! 我的名字的确是一个 typo

github contribution grid snake animation

  • 🔭 I’m currently working at PingCAP, Home

  • 🌱 I’m currently using GoLang Python java k8s/rancher

  • ✈️ Open to Remote Job Opportunities 🍻

  • 👀 Feel free to contact me via Telegram

ehco's People

Contributors

chenrui333 avatar czwstc avatar dependabot[bot] avatar dongxinb avatar ehco1996 avatar gkirito avatar husharp avatar jessemoe avatar leishi1313 avatar sljeff avatar wuqinqiang avatar xpzouying avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ehco's Issues

转发端口段

请问目前版本能否支持端口段转发呢?

如果没有,请问日后有无增加的可能呢?

谢谢

管理中转记录报错提示这个

(colorConst.blue_prefix,str(len(json_data['relay_configs'])),colorConst.plain_prefix))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

关于ehco各中转流量统计的API

感谢作者提供这么棒的中转工具!

因为我是一直独立使用Ehco搭建隧道的,所以我一直在查找Ehco自身是否存在一个WEB API可以直接输出每个转发的流量总计。我在阅读了ehco/internal/web的代码中,看到了在traffic_metrics.go中有提到,但是我似乎并没有在server.goroute中找到有关可以直接提供流量统计的API入口。

另外我在ehco/monitor看到了一个dashboard,不仅可以输出Ping值,也可以输出流量总计,您知道这个面板是如何部署的吗?还是说需要搭配您的django-sspanel一起食用哦?

目前我的临时解决方案是只能通过系统级的iptables对端口的入站和出站流量进行统计,如果Ehco自身有这样的WEB API或者以cli的形式可以输出结果的话就再好不过了。

非常感谢!

wss隧道下无法中转udp

使用软件:SSRR
出现的问题:开启udp转发后无法建立tcp链接,关闭udp转发后tcp正常建立连接。

请问监控web怎么运行?

请问监控web怎么运行?我配置好后打开IP:9000显示下面的内容,并没有监控的信息?

Ehco(Version 1.0.7)
ehco is a network relay tool and a typo :)
More information here

Metrics

Debug

小白

请教ehco_1.1.0_linux_amd64这个怎么用?好像没法解压

发现一个bug

现有中转规则删除完后,新增加规则不会生效,查看规则显示现有规则为0。恢复默认配置后,新增规则才可以。

是否支持json文件

是否能通过读取json文件来实现开机自启,多端口转发?ehco的配置文件格式如何写?

better logger

logger with different component field such as

  • listen type
  • transport type
  • remote label
  • ...

关于转发DDNS

你好!我想问一下转发DDNS的话,多久刷新一次DDNS的缓存呢?
看了一遍readme好像没看到有写关于这个的,所以来问一下

端口监听和负载均衡的需求

配置文件中configs的一个数组里多个 listen 只生效最后一个,希望可以对端口监听改进下,和监听IP分开,可以区间监听,类似于V2ray,或者可以全部生效
希望大佬可以加上负载均衡,比如多个 remote 会轮询

转发ws隧道, 中转机运行一段时间会抛异常

中转机运行:
ehco -l 0.0.0.0:20000 -r ws://x.x.x.x:20000 -tt ws
大概半小时抛异常, 进程退出. 落地机没有这个问题.

直接运行ehco, 和使用docker运行都会复现, 下面是部分docker日志:

internal/poll.runtime_pollWait(0x7eff551f4b38, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00010b918, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x1df, 0xc00010b900, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00010b800, 0xc00010b900, 0x4000000000000000, 0x62e, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00010b800, 0xaf5e60, 0xc0000b84d0, 0xc0002d8d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b84c0, 0xaf5e60, 0xc0000b84d0, 0x18, 0xc0002d8de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b84c0, 0xaf5e60, 0xc0000b84d0, 0x7eff551cbc38, 0xc0000b84c0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b84c0, 0xaf5e60, 0xc0000b84d0, 0xc000348000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b84c0, 0xaf5e60, 0xc0000b84d0, 0xc000348000, 0x1000, 0x1000, 0x668001, 0xc0002d8fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b84c0, 0xaf9f68, 0xc0000b84d0, 0x7fff5ab37f71, 0x1a, 0xc000343f80)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5908 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b82b8, 0xaf9f68, 0xc00000e4c8, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b82b8, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b82b8)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 3987 [chan receive, 4 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b8238, 0xaf9f68, 0xc00000e420, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b8238, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b8238)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6191 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e6b8, 0xaf9f68, 0xc0000b84e0, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e6b8, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e6b8)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6466 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f6010, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003efe98, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x73, 0xc0003efe80, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0003efd00, 0xc0003efe80, 0x4000000000000000, 0x2cca, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0003efd00, 0xaf5e60, 0xc0000b86b8, 0xc000035598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e878, 0xaf5e60, 0xc0000b86b8, 0x18, 0xc0000355e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e878, 0xaf5e60, 0xc0000b86b8, 0x7eff551cbc38, 0xc00000e878, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e878, 0xaf5e60, 0xc0000b86b8, 0xc0003b1000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e878, 0xaf5e60, 0xc0000b86b8, 0xc0003b1000, 0x1000, 0x1000, 0x668001, 0xc0000357a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e878, 0xaf9f68, 0xc0000b86b8, 0x7fff5ab37f71, 0x1a, 0xc000573aa0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 2673 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f4df0, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00053df98, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x9f, 0xc00053df80, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00054e080, 0xc00053df80, 0x4000000000000000, 0x2c54, 0x1, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00054e080, 0xaf5e60, 0xc0000b9090, 0xaf95b8, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000f3c0, 0xaf5e60, 0xc0000b9090, 0x18, 0xc000035de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000f3c0, 0xaf5e60, 0xc0000b9090, 0x7eff551cbc38, 0xc00000f3c0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000f3c0, 0xaf5e60, 0xc0000b9090, 0xc0003a3000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000f3c0, 0xaf5e60, 0xc0000b9090, 0xc0003a3000, 0x1000, 0x1000, 0x668001, 0xc000035fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000f3c0, 0xaf9f68, 0xc0000b9090, 0x7fff5ab37f71, 0x1a, 0xc0004ea780)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5226 [chan receive, 2 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e668, 0xaf9f68, 0xc0000b8538, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e668, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e668)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 5775 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551fb318, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004c0c98, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x15f, 0xc0004c0c80, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00053d380, 0xc0004c0c80, 0x4000000000000000, 0x512, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00053d380, 0xaf5e60, 0xc0000b81e8, 0xc000033d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e390, 0xaf5e60, 0xc0000b81e8, 0x18, 0xc000033de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e390, 0xaf5e60, 0xc0000b81e8, 0x7eff551cbc38, 0xc00000e390, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e390, 0xaf5e60, 0xc0000b81e8, 0xc0000df000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e390, 0xaf5e60, 0xc0000b81e8, 0xc0000df000, 0x1000, 0x1000, 0x668001, 0xc000033fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e390, 0xaf9f68, 0xc0000b81e8, 0x7fff5ab37f71, 0x1a, 0xc0002be1e0)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 3526 [IO wait, 4 minutes]:
internal/poll.runtime_pollWait(0x7eff551e6180, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000574598, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x1b1, 0xc000574580, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000574680, 0xc000574580, 0x4000000000000000, 0x704, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000574680, 0xaf5e60, 0xc0000b9610, 0xc000039598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b9630, 0xaf5e60, 0xc0000b9610, 0x18, 0xc0000395e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b9630, 0xaf5e60, 0xc0000b9610, 0x7eff551cbc38, 0xc0000b9630, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b9630, 0xaf5e60, 0xc0000b9610, 0xc0002b2000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b9630, 0xaf5e60, 0xc0000b9610, 0xc0002b2000, 0x1000, 0x1000, 0x668001, 0xc0000397a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc0000b9630, 0xaf9f68, 0xc0000b9610, 0x7fff5ab37f71, 0x1a, 0xc000572a20)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 2672 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f4d08, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00054e098, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x33, 0xc00054e080, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00053df80, 0xc00054e080, 0x4000000000000000, 0x1d4a, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00053df80, 0xaf5e60, 0xc00000f3c0, 0xc000039d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b9090, 0xaf5e60, 0xc00000f3c0, 0x18, 0xc000039de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b9090, 0xaf5e60, 0xc00000f3c0, 0x7eff551cbc38, 0xc0000b9090, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b9090, 0xaf5e60, 0xc00000f3c0, 0xc0000e0000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b9090, 0xaf5e60, 0xc00000f3c0, 0xc0000e0000, 0x1000, 0x1000, 0x668001, 0xc000039fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b9090, 0xaf9f68, 0xc00000f3c0, 0x7fff5ab37f71, 0x1a, 0xc0004ea780)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 2639 [chan receive, 4 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b9068, 0xaf9f68, 0xc00000f390, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b9068, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b9068)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6305 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f6498, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000368998, 0x72, 0x200, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x20b, 0xc000368980, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0003ee180, 0xc000368980, 0x4000000000000000, 0x1c9a, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0003ee180, 0xaf5e60, 0xc0000b8598, 0xc000038598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e760, 0xaf5e60, 0xc0000b8598, 0x18, 0xc0000385e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e760, 0xaf5e60, 0xc0000b8598, 0x7eff551cbc38, 0xc00000e760, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e760, 0xaf5e60, 0xc0000b8598, 0xc000669000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e760, 0xaf5e60, 0xc0000b8598, 0xc000669000, 0x1000, 0x1000, 0x668001, 0xc0000387a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e760, 0xaf9f68, 0xc0000b8598, 0x7fff5ab37f71, 0x1a, 0xc000572d20)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5592 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f5618, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000504d98, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0xd3, 0xc000504d80, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000504e80, 0xc000504d80, 0x4000000000000000, 0xac6, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000504e80, 0xaf5e60, 0xc0000b8088, 0xc000037598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b8090, 0xaf5e60, 0xc0000b8088, 0x18, 0xc0000375e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b8090, 0xaf5e60, 0xc0000b8088, 0x7eff551cbc38, 0xc0000b8090, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b8090, 0xaf5e60, 0xc0000b8088, 0xc000378000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b8090, 0xaf5e60, 0xc0000b8088, 0xc000378000, 0x1000, 0x1000, 0x668001, 0xc0000377a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc0000b8090, 0xaf9f68, 0xc0000b8088, 0x7fff5ab37f71, 0x1a, 0xc0002389c0)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 4058 [IO wait, 4 minutes]:
internal/poll.runtime_pollWait(0x7eff551b8268, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00023b718, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x37, 0xc00023b700, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00023b600, 0xc00023b700, 0x4000000000000000, 0xf7e, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00023b600, 0xaf5e60, 0xc0000b82b0, 0xc000037598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e4a0, 0xaf5e60, 0xc0000b82b0, 0x18, 0xc0000375e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e4a0, 0xaf5e60, 0xc0000b82b0, 0x7eff551cbc38, 0xc00000e4a0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e4a0, 0xaf5e60, 0xc0000b82b0, 0xc000428000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e4a0, 0xaf5e60, 0xc0000b82b0, 0xc000428000, 0x1000, 0x1000, 0x668001, 0xc0000377a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e4a0, 0xaf9f68, 0xc0000b82b0, 0x7fff5ab37f71, 0x1a, 0xc000086ea0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 2710 [IO wait, 4 minutes]:
internal/poll.runtime_pollWait(0x7eff551e5ec8, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004e7898, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x2d, 0xc0004e7880, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004e7980, 0xc0004e7880, 0x4000000000000000, 0x953, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004e7980, 0xaf5e60, 0xc00000f400, 0xc000033d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b90e0, 0xaf5e60, 0xc00000f400, 0x18, 0xc000033de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b90e0, 0xaf5e60, 0xc00000f400, 0x7eff551cbc38, 0xc0000b90e0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b90e0, 0xaf5e60, 0xc00000f400, 0xc000411000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b90e0, 0xaf5e60, 0xc00000f400, 0xc000411000, 0x1000, 0x1000, 0x668001, 0xc000033fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc0000b90e0, 0xaf9f68, 0xc00000f400, 0x7fff5ab37f71, 0x1a, 0xc0004eaa20)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 2707 [chan receive, 4 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000f400, 0xaf9f68, 0xc0000b90e0, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000f400, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000f400)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 5786 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b81f0, 0xaf9f68, 0xc00000e398, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b81f0, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b81f0)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6465 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551d5628, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003efc98, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x4f, 0xc0003efc80, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004b8600, 0xc0003efc80, 0x4000000000000000, 0x19ca, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004b8600, 0xaf5e60, 0xc00000e870, 0xc0002d6d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e880, 0xaf5e60, 0xc00000e870, 0x18, 0xc0002d6de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e880, 0xaf5e60, 0xc00000e870, 0x7eff551cbc38, 0xc00000e880, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e880, 0xaf5e60, 0xc00000e870, 0xc0002c7000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e880, 0xaf5e60, 0xc00000e870, 0xc0002c7000, 0x1000, 0x1000, 0x668001, 0xc0002d6fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e880, 0xaf9f68, 0xc00000e870, 0x7fff5ab37f71, 0x1a, 0xc000573a40)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 6292 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551e5130, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000368898, 0x72, 0x200, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x209, 0xc000368880, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000368780, 0xc000368880, 0x4000000000000000, 0x173f, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000368780, 0xaf5e60, 0xc00000e768, 0xc0002d5d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b8580, 0xaf5e60, 0xc00000e768, 0x18, 0xc0002d5de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b8580, 0xaf5e60, 0xc00000e768, 0x7eff551cbc38, 0xc0000b8580, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b8580, 0xaf5e60, 0xc00000e768, 0xc0000c8000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b8580, 0xaf5e60, 0xc00000e768, 0xc0000c8000, 0x1000, 0x1000, 0x668001, 0xc0002d5fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b8580, 0xaf9f68, 0xc00000e768, 0x7fff5ab37f71, 0x1a, 0xc000445740)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 4066 [chan receive, 4 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e4a0, 0xaf9f68, 0xc0000b82b0, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e4a0, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e4a0)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 5367 [chan receive, 2 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e750, 0xaf9f68, 0xc00000e758, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e750, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e750)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 5422 [IO wait, 2 minutes]:
internal/poll.runtime_pollWait(0x7eff551cd838, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004a2518, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x116, 0xc0004a2500, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0003efd80, 0xc0004a2500, 0x4000000000000000, 0x1e2fe, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0003efd80, 0xaf5e60, 0xc0000b86e8, 0xc000033d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b86e0, 0xaf5e60, 0xc0000b86e8, 0x18, 0xc000033de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b86e0, 0xaf5e60, 0xc0000b86e8, 0x7eff551cbc38, 0xc0000b86e0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b86e0, 0xaf5e60, 0xc0000b86e8, 0xc0000ef000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b86e0, 0xaf5e60, 0xc0000b86e8, 0xc0000ef000, 0x1000, 0x1000, 0x668001, 0xc000033fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b86e0, 0xaf9f68, 0xc0000b86e8, 0x7fff5ab37f71, 0x1a, 0xc000086fc0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5398 [IO wait, 2 minutes]:
internal/poll.runtime_pollWait(0x7eff54fe3828, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003ef818, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x96, 0xc0003ef800, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0003ef700, 0xc0003ef800, 0x4000000000000000, 0x278a, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0003ef700, 0xaf5e60, 0xc00000e780, 0xc000038d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b86a0, 0xaf5e60, 0xc00000e780, 0x18, 0xc000038de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b86a0, 0xaf5e60, 0xc00000e780, 0x7eff551cbc38, 0xc0000b86a0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b86a0, 0xaf5e60, 0xc00000e780, 0xc0003da000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b86a0, 0xaf5e60, 0xc00000e780, 0xc0003da000, 0x1000, 0x1000, 0x668001, 0xc000038fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b86a0, 0xaf9f68, 0xc00000e780, 0x7fff5ab37f71, 0x1a, 0xc00007b020)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5330 [chan receive, 2 minutes]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e700, 0xaf9f68, 0xc00000e708, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e700, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e700)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6293 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551e5218, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000368798, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x18b, 0xc000368780, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000368880, 0xc000368780, 0x4000000000000000, 0x27d, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000368880, 0xaf5e60, 0xc0000b8580, 0xc0002d4d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e768, 0xaf5e60, 0xc0000b8580, 0x18, 0xc0002d4de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e768, 0xaf5e60, 0xc0000b8580, 0x7eff551cbc38, 0xc00000e768, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e768, 0xaf5e60, 0xc0000b8580, 0xc0003d0000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e768, 0xaf5e60, 0xc0000b8580, 0xc0003d0000, 0x1000, 0x1000, 0x668001, 0xc0002d4fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e768, 0xaf9f68, 0xc0000b8580, 0x7fff5ab37f71, 0x1a, 0xc000445740)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5126 [IO wait, 2 minutes]:
internal/poll.runtime_pollWait(0x7eff551f5c70, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00023a018, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0xe0, 0xc00023a000, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00023a180, 0xc00023a000, 0x4000000000000000, 0xfb5, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00023a180, 0xaf5e60, 0xc0000b8490, 0xc0002d6598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e558, 0xaf5e60, 0xc0000b8490, 0x18, 0xc0002d65e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e558, 0xaf5e60, 0xc0000b8490, 0x7eff551cbc38, 0xc00000e558, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e558, 0xaf5e60, 0xc0000b8490, 0xc000593000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e558, 0xaf5e60, 0xc0000b8490, 0xc000593000, 0x1000, 0x1000, 0x668001, 0xc0002d67a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e558, 0xaf9f68, 0xc0000b8490, 0x7fff5ab37f71, 0x1a, 0xc0004457a0)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5862 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e418, 0xaf9f68, 0xc0000b8270, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e418, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e418)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6348 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f3f70, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000369998, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x1a5, 0xc000369980, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000369880, 0xc000369980, 0x4000000000000000, 0xd8a, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000369880, 0xaf5e60, 0xc00000e7b0, 0xc0002d7d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b85f8, 0xaf5e60, 0xc00000e7b0, 0x18, 0xc0002d7de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b85f8, 0xaf5e60, 0xc00000e7b0, 0x7eff551cbc38, 0xc0000b85f8, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b85f8, 0xaf5e60, 0xc00000e7b0, 0xc000250000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b85f8, 0xaf5e60, 0xc00000e7b0, 0xc000250000, 0x1000, 0x1000, 0x668001, 0xc0002d7fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b85f8, 0xaf9f68, 0xc00000e7b0, 0x7fff5ab37f71, 0x1a, 0xc0005730e0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5789 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551dfe28, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004c0d18, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x161, 0xc0004c0d00, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004c0e00, 0xc0004c0d00, 0x4000000000000000, 0x4ce, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004c0e00, 0xaf5e60, 0xc0000b81f0, 0xc000038d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e398, 0xaf5e60, 0xc0000b81f0, 0x18, 0xc000038de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e398, 0xaf5e60, 0xc0000b81f0, 0x7eff551cbc38, 0xc00000e398, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e398, 0xaf5e60, 0xc0000b81f0, 0xc000349000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e398, 0xaf5e60, 0xc0000b81f0, 0xc000349000, 0x1000, 0x1000, 0x668001, 0xc000038fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e398, 0xaf9f68, 0xc0000b81f0, 0x7fff5ab37f71, 0x1a, 0xc000087bc0)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5925 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551dfb70, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004c1e18, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0xf7, 0xc0004c1e00, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000574b80, 0xc0004c1e00, 0x4000000000000000, 0x329, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000574b80, 0xaf5e60, 0xc0000b82a0, 0xc0002d2d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e4b0, 0xaf5e60, 0xc0000b82a0, 0x18, 0xc0002d2de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e4b0, 0xaf5e60, 0xc0000b82a0, 0x7eff551cbc38, 0xc00000e4b0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e4b0, 0xaf5e60, 0xc0000b82a0, 0xc000473000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e4b0, 0xaf5e60, 0xc0000b82a0, 0xc000473000, 0x1000, 0x1000, 0x668001, 0xc0002d2fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e4b0, 0xaf9f68, 0xc0000b82a0, 0x7fff5ab37f71, 0x1a, 0xc0002becc0)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 6214 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551cdda8, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00023b418, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x1e7, 0xc00023b400, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00023b300, 0xc00023b400, 0x4000000000000000, 0x117e, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00023b300, 0xaf5e60, 0xc0000b84e0, 0xc000039d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e6b8, 0xaf5e60, 0xc0000b84e0, 0x18, 0xc000039de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e6b8, 0xaf5e60, 0xc0000b84e0, 0x7eff551cbc38, 0xc00000e6b8, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e6b8, 0xaf5e60, 0xc0000b84e0, 0xc00011c000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e6b8, 0xaf5e60, 0xc0000b84e0, 0xc00011c000, 0x1000, 0x1000, 0x668001, 0xc000039fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e6b8, 0xaf9f68, 0xc0000b84e0, 0x7fff5ab37f71, 0x1a, 0xc000572120)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5255 [IO wait, 2 minutes]:
internal/poll.runtime_pollWait(0x7eff551dfc58, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000368498, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x2b, 0xc000368480, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000368300, 0xc000368480, 0x4000000000000000, 0x1642, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000368300, 0xaf5e60, 0xc0000b8588, 0xc000037d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e698, 0xaf5e60, 0xc0000b8588, 0x18, 0xc000037de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e698, 0xaf5e60, 0xc0000b8588, 0x7eff551cbc38, 0xc00000e698, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e698, 0xaf5e60, 0xc0000b8588, 0xc000111000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e698, 0xaf5e60, 0xc0000b8588, 0xc000111000, 0x1000, 0x1000, 0x668001, 0xc000037fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e698, 0xaf9f68, 0xc0000b8588, 0x7fff5ab37f71, 0x1a, 0xc00007a300)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6411 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e818, 0xaf9f68, 0xc00000e820, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e818, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e818)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6306 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f6580, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003ee198, 0x72, 0x200, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x20d, 0xc0003ee180, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000368980, 0xc0003ee180, 0x4000000000000000, 0x1fc8, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000368980, 0xaf5e60, 0xc00000e760, 0xc0002d4598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b8598, 0xaf5e60, 0xc00000e760, 0x18, 0xc0002d45e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b8598, 0xaf5e60, 0xc00000e760, 0x7eff551cbc38, 0xc0000b8598, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b8598, 0xaf5e60, 0xc00000e760, 0xc0002bb000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b8598, 0xaf5e60, 0xc00000e760, 0xc0002bb000, 0x1000, 0x1000, 0x668001, 0xc0002d47a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc0000b8598, 0xaf9f68, 0xc00000e760, 0x7fff5ab37f71, 0x1a, 0xc000572d20)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5924 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551f4880, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000574b98, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0xf5, 0xc000574b80, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004c1e00, 0xc000574b80, 0x4000000000000000, 0x18d, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004c1e00, 0xaf5e60, 0xc00000e4b0, 0xc0002d7d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b82a0, 0xaf5e60, 0xc00000e4b0, 0x18, 0xc0002d7de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b82a0, 0xaf5e60, 0xc00000e4b0, 0x7eff551cbc38, 0xc0000b82a0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b82a0, 0xaf5e60, 0xc00000e4b0, 0xc000391000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b82a0, 0xaf5e60, 0xc00000e4b0, 0xc000391000, 0x1000, 0x1000, 0x668001, 0xc0002d7fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b82a0, 0xaf9f68, 0xc00000e4b0, 0x7fff5ab37f71, 0x1a, 0xc0002becc0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6215 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551cde90, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00023b318, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x1e5, 0xc00023b300, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc00023b400, 0xc00023b300, 0x4000000000000000, 0xf80, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc00023b400, 0xaf5e60, 0xc00000e6b8, 0xc0002d8d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b84e0, 0xaf5e60, 0xc00000e6b8, 0x18, 0xc0002d8de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b84e0, 0xaf5e60, 0xc00000e6b8, 0x7eff551cbc38, 0xc0000b84e0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b84e0, 0xaf5e60, 0xc00000e6b8, 0xc0005fc000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b84e0, 0xaf5e60, 0xc00000e6b8, 0xc0005fc000, 0x1000, 0x1000, 0x668001, 0xc0002d8fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc0000b84e0, 0xaf9f68, 0xc00000e6b8, 0x7fff5ab37f71, 0x1a, 0xc000572120)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5371 [IO wait, 2 minutes]:
internal/poll.runtime_pollWait(0x7eff551fb888, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003ef498, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x86, 0xc0003ef480, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000369700, 0xc0003ef480, 0x4000000000000000, 0xfd4, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000369700, 0xaf5e60, 0xc00000e758, 0xc0002d6d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e750, 0xaf5e60, 0xc00000e758, 0x18, 0xc0002d6de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e750, 0xaf5e60, 0xc00000e758, 0x7eff551cbc38, 0xc00000e750, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e750, 0xaf5e60, 0xc00000e758, 0xc000671000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e750, 0xaf5e60, 0xc00000e758, 0xc000671000, 0x1000, 0x1000, 0x668001, 0xc0002d6fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e750, 0xaf9f68, 0xc00000e758, 0x7fff5ab37f71, 0x1a, 0xc00007ad20)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6290 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc00000e760, 0xaf9f68, 0xc0000b8598, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc00000e760, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc00000e760)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6307 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b85a0, 0xaf9f68, 0xc00000e770, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b85a0, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b85a0)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 5926 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551fc9c0, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000574d18, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x122, 0xc000574d00, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004c1e80, 0xc000574d00, 0x4000000000000000, 0x18d, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004c1e80, 0xaf5e60, 0xc00000e4b8, 0xc000033d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b82a8, 0xaf5e60, 0xc00000e4b8, 0x18, 0xc000033de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b82a8, 0xaf5e60, 0xc00000e4b8, 0x7eff551cbc38, 0xc0000b82a8, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b82a8, 0xaf5e60, 0xc00000e4b8, 0xc000435000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b82a8, 0xaf5e60, 0xc00000e4b8, 0xc000435000, 0x1000, 0x1000, 0x668001, 0xc000033fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b82a8, 0xaf9f68, 0xc00000e4b8, 0x7fff5ab37f71, 0x1a, 0xc0002bed20)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6346 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b85f8, 0xaf9f68, 0xc00000e7b0, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b85f8, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b85f8)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 5774 [IO wait]:
internal/poll.runtime_pollWait(0x7eff54fe4220, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00053d398, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x163, 0xc00053d380, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004c0c80, 0xc00053d380, 0x4000000000000000, 0x18ca, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004c0c80, 0xaf5e60, 0xc00000e390, 0xc0002d7598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b81e8, 0xaf5e60, 0xc00000e390, 0x18, 0xc0002d75e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b81e8, 0xaf5e60, 0xc00000e390, 0x7eff551cbc38, 0xc0000b81e8, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b81e8, 0xaf5e60, 0xc00000e390, 0xc0003d7000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b81e8, 0xaf5e60, 0xc00000e390, 0xc0003d7000, 0x1000, 0x1000, 0x668001, 0xc0002d77a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b81e8, 0xaf9f68, 0xc00000e390, 0x7fff5ab37f71, 0x1a, 0xc0002be1e0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6295 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551e68c0, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000368b18, 0x72, 0x200, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x22f, 0xc000368b00, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc000368a00, 0xc000368b00, 0x4000000000000000, 0x17d4, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc000368a00, 0xaf5e60, 0xc00000e770, 0xc0002d4598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b85a0, 0xaf5e60, 0xc00000e770, 0x18, 0xc0002d45e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b85a0, 0xaf5e60, 0xc00000e770, 0x7eff551cbc38, 0xc0000b85a0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b85a0, 0xaf5e60, 0xc00000e770, 0xc000451000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b85a0, 0xaf5e60, 0xc00000e770, 0xc000451000, 0x1000, 0x1000, 0x668001, 0xc0002d47a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b85a0, 0xaf9f68, 0xc00000e770, 0x7fff5ab37f71, 0x1a, 0xc000445860)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6055 [chan receive]:
github.com/Ehco1996/ehco/internal/transporter.transport(0xaf9f68, 0xc0000b83d0, 0xaf9f68, 0xc00000e5c8, 0x7fff5ab37f71, 0x1a, 0x2, 0x0)
	/app/internal/transporter/buffer.go:79 +0x13f
github.com/Ehco1996/ehco/internal/transporter.(*Ws).HandleTCPConn(0xc00000e370, 0xc0000b83d0, 0x0, 0x0)
	/app/internal/transporter/ws.go:36 +0x4a5
github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer.func1(0xc00005cff0, 0xc0000b83d0)
	/app/internal/relay/relay.go:106 +0x42
created by github.com/Ehco1996/ehco/internal/relay.(*Relay).RunLocalTCPServer
	/app/internal/relay/relay.go:105 +0xf8

goroutine 6058 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551fc368, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0000b3d18, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x6b, 0xc0000b3d00, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0000b3e80, 0xc0000b3d00, 0x4000000000000000, 0x4385, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0000b3e80, 0xaf5e60, 0xc0000b83d0, 0xc0002d2d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e5c8, 0xaf5e60, 0xc0000b83d0, 0x18, 0xc0002d2de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e5c8, 0xaf5e60, 0xc0000b83d0, 0x7eff551cbc38, 0xc00000e5c8, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e5c8, 0xaf5e60, 0xc0000b83d0, 0xc000314000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e5c8, 0xaf5e60, 0xc0000b83d0, 0xc000314000, 0x1000, 0x1000, 0x668001, 0xc0002d2fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func2(0xaf9f68, 0xc00000e5c8, 0xaf9f68, 0xc0000b83d0, 0x7fff5ab37f71, 0x1a, 0xc000343260)
	/app/internal/transporter/buffer.go:74 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:71 +0x11f

goroutine 5928 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551fabd8, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0000b2018, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x170, 0xc0000b2000, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004c1f00, 0xc0000b2000, 0x4000000000000000, 0x18d, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004c1f00, 0xaf5e60, 0xc00000e4c8, 0xc0002d5d98, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b82b8, 0xaf5e60, 0xc00000e4c8, 0x18, 0xc0002d5de8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b82b8, 0xaf5e60, 0xc00000e4c8, 0x7eff551cbc38, 0xc0000b82b8, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b82b8, 0xaf5e60, 0xc00000e4c8, 0xc000279000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b82b8, 0xaf5e60, 0xc00000e4c8, 0xc000279000, 0x1000, 0x1000, 0x668001, 0xc0002d5fa0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b82b8, 0xaf9f68, 0xc00000e4c8, 0x7fff5ab37f71, 0x1a, 0xc0002bed80)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 6432 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551d5540, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004b8618, 0x72, 0x0, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x5b, 0xc0004b8600, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0003efc80, 0xc0004b8600, 0x4000000000000000, 0xd86e, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0003efc80, 0xaf5e60, 0xc00000e880, 0xc000037598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc00000e870, 0xaf5e60, 0xc00000e880, 0x18, 0xc0000375e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc00000e870, 0xaf5e60, 0xc00000e880, 0x7eff551cbc38, 0xc00000e870, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc00000e870, 0xaf5e60, 0xc00000e880, 0xc000471000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc00000e870, 0xaf5e60, 0xc00000e880, 0xc000471000, 0x1000, 0x1000, 0x668001, 0xc0000377a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc00000e870, 0xaf9f68, 0xc00000e880, 0x7fff5ab37f71, 0x1a, 0xc000573a40)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf

goroutine 5788 [IO wait]:
internal/poll.runtime_pollWait(0x7eff551dfd40, 0x72, 0x0)
	/usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0004c0e18, 0x72, 0x100, 0x0, 0x400000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.spliceDrain(0x165, 0xc0004c0e00, 0x400000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:96 +0x1a5
internal/poll.Splice(0xc0004c0d00, 0xc0004c0e00, 0x4000000000000000, 0x18a9, 0xc0001cab01, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/splice_linux.go:42 +0x131
net.splice(0xc0004c0d00, 0xaf5e60, 0xc00000e398, 0xc000034598, 0x40a63f, 0xc000010000, 0x9b2800)
	/usr/local/go/src/net/splice_linux.go:39 +0xab
net.(*TCPConn).readFrom(0xc0000b81f0, 0xaf5e60, 0xc00000e398, 0x18, 0xc0000345e8, 0x40ba4a)
	/usr/local/go/src/net/tcpsock_posix.go:48 +0x46
net.(*TCPConn).ReadFrom(0xc0000b81f0, 0xaf5e60, 0xc00000e398, 0x7eff551cbc38, 0xc0000b81f0, 0x1)
	/usr/local/go/src/net/tcpsock.go:103 +0x4d
io.copyBuffer(0xaf5e80, 0xc0000b81f0, 0xaf5e60, 0xc00000e398, 0xc000600000, 0x1000, 0x1000, 0xa2a7c0, 0x1000, 0xaf5e60)
	/usr/local/go/src/io/io.go:409 +0x357
io.CopyBuffer(0xaf5e80, 0xc0000b81f0, 0xaf5e60, 0xc00000e398, 0xc000600000, 0x1000, 0x1000, 0x668001, 0xc0000347a0, 0x92205b)
	/usr/local/go/src/io/io.go:396 +0x8c
github.com/Ehco1996/ehco/internal/transporter.transport.func1(0xaf9f68, 0xc0000b81f0, 0xaf9f68, 0xc00000e398, 0x7fff5ab37f71, 0x1a, 0xc000087bc0)
	/app/internal/transporter/buffer.go:66 +0x17b
created by github.com/Ehco1996/ehco/internal/transporter.transport
	/app/internal/transporter/buffer.go:63 +0xaf```

是否能支持中继模式(指套娃模式

对于中继模式(ABC三台机),是否考虑A向B传递remote,C就不用再安装程序
A向B传递一个remote(C:SS端口)参数,B读取remote(C:SS端口)地址并转发C(落地鸡)的流量


对于普通转发(AB两台机),B读取remote(127.0.0.1:SS端口),B转发本地SS端口流量

只是个人想法,希望能够实现

热重载配置不完全生效

目前热重载的逻辑是判断新的配置里是否包含新的监听端口,当仅有 remote 字段发生改变的时候,热重载会失效

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.