Closed stevezhangzl closed 7 months ago
而且现在发现一个问题,如果timeout设置为-1的话,视频通讯一段时间后会阻塞在hev_task_yield (HEV_TASK_WAITIO) 视频也会断
你好,请测试 https://github.com/heiher/hev-socks5-tunnel/commit/1f586d22e56209e86cb3ab2992ff7c89ea4edfd2 能否解决问题?(请注意同步 submodule:git submodule update
好的,我测试下
还是会断,断流发生在hev_socks5_task_io_yielder执行hev_task_yield (HEV_TASK_WAITIO)切换任务时就已经断了
而且现在发现一个问题,如果timeout设置为-1的话,视频通讯一段时间后会阻塞在hev_task_yield (HEV_TASK_WAITIO) 视频也会断
之前没注意这条更新。
还是会断,断流发生在hev_socks5_task_io_yielder执行hev_task_yield (HEV_TASK_WAITIO)切换任务时就已经断了
看上去这得我这能复现来看看了,有简便的方法吗?
现在这个是在内网部署了一套webrtc即时视频来测试udp in udp模式的,经过咱们socks5的代理后,然后走中继服务器转发
我这边也再定位下,大佬有没有什么猜测么,协程切换任务的时候,出现问题好像是反复在执行hev_task_system_schedule 但没去真正的去切换执行
发现 timeout -1的情况下,一段时间异常,从日志上看,从tun虚卡中读取出数据,是不是应该切换任务去send to 但是切到的确是recv from任务,又继续读取数据了,然后就异常中断了
tun read后 切换任务没有去执行send
经测试发现 ,大量udp读写后,会出现突然tun read数据后,没有进入到 static void udp_recv_handler (void arg, struct udp_pcb pcb, struct pbuf p, const ip_addr_t addr, u16_t port)
函数里,出现问题
发现 timeout -1的情况下,一段时间异常,从日志上看,从tun虚卡中读取出数据,是不是应该切换任务去send to 但是切到的确是recv from任务,又继续读取数据了,然后就异常中断了
lwip从tun上读取udp frame后,不会同步sendto的,而是放到udp frame list中,唤醒前向链路的协程任务转发。
经测试发现 ,大量udp读写后,会出现突然tun read数据后,没有进入到 udp_recv_handler
能不能写个独立的 udp 收发程序模拟你的场景来辅助复现问题?
另外,你如果怀疑 lwip 侧有问题的话,建议你使用 hev-socks5-tproxy 项目替换 hev-socks5-tunnel 来验证。
发现 timeout -1的情况下,一段时间异常,从日志上看,从tun虚卡中读取出数据,是不是应该切换任务去send to 但是切到的确是recv from任务,又继续读取数据了,然后就异常中断了
lwip从tun上读取udp frame后,不会同步sendto的,而是放到udp frame list中,唤醒前向链路的协程任务转发。
经测试发现 ,大量udp读写后,会出现突然tun read数据后,没有进入到 udp_recv_handler
能不能写个独立的 udp 收发程序模拟你的场景来辅助复现问题?
lwip侧不太清楚原理,正常tun read后调用 netif.input (buf, &netif) 不是应该先回调udp_recv_handler 现在就是没有回调这个函数,所以不会添加udp frame list 自然没有唤醒send to的协程任务,但是现在就是这个问题很奇怪,为什么收发一段时间后出现这个问题
还是试试 hev-socks5-tproxy 吧。另外问问从会话建立到出大问题,大概需要多久?(不会是客户端侧的路由表被网络管理器重置了吧?[doggy]
还是试试 hev-socks5-tproxy 吧。另外问问从会话建立到出大问题,大概需要多久?(不会是客户端侧的路由表被网络管理器重置了吧?[doggy]
这个是在android上跑的,恩,我再找找问题试试,会话建立到出问题大概能通讯个4,5分钟左右
我用iperf3压了半小时udp双向传输,目前没有发现问题。
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 8500
inet 198.18.0.1 netmask 255.255.255.255 destination 198.18.0.1
inet6 fc00::1 prefixlen 128 scopeid 0x0<global>
inet6 fe80::8b73:76df:835d:743e prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 17307794 bytes 22984732942 (21.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17307711 bytes 22984606228 (21.4 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[ ID][Role] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5][TX-C] 0.00-1800.00 sec 21.0 GBytes 100 Mbits/sec 0.000 ms 0/17307684 (0%) sender
[ 5][TX-C] 0.00-1800.01 sec 21.0 GBytes 100 Mbits/sec 0.016 ms 0/17307684 (0%) receiver
[ 7][RX-C] 0.00-1800.00 sec 21.0 GBytes 100 Mbits/sec 0.000 ms 0/17307780 (0%) sender
[ 7][RX-C] 0.00-1800.01 sec 21.0 GBytes 100 Mbits/sec 0.012 ms 302/17307780 (0.0017%) receiver
老师你好,发现hev-config.c中的read_write_timeout 值在udp in udp的情况下,即时视频通讯会影响视频流的连接,到了超时时间,出现io tiemout 会把udp的任务和连接关掉,这块如果是即时视频通讯就会存在问题(视频会断),请问这块的设计有什么考量么?怎么解决这个问题