Dotnetty ClosedChannelException I/O error occurred 异常原因

症状

    折磨了我一整天,在单独的console application下好好的,集成到一块就在 bootstrap.BindAsync()处抛出 ClosedChannelException “I/O error occurred" 异常,也没有其他有价值的信息了。集成环境与console app的区别有3处:

  1. 集成环境是在asp.net core3.1中;
  2. 集成环境是通过反射加载的;
  3. 集成环境中,还有一个地方用到了Dotnetty。

分析

  1.  是不是 asp.net core 不支持udp server(我用Dotnetty来开启udp server)?  答案是支持;
  2.  是不是Dotnetty对内存啥的有限制?这个在unity论坛上有人问,Dotnetty本身不存在这个问题;
  3. 是不是反射创建udp server这个操作异端了?以前也这么干过啊...wtf

跟踪

    把引用Dotnetty的nuget都换成github代码编译后的本地dll引用,这样可以跟踪到Dotnetty里面的异常,然并卵,在console app下可以跟进去,在集成环境中就是跟不进去。我观察两者生成的dll文件,发现了不同:

    console app引用的Dotnetty*.dll文件居然与集成环境的不一样?!原来集成环境中,另一处使用Dotnetty是通过nuget,console app引用的是本地编译后的,并且nuget的覆盖了本地编译的,造成了版本冲突!从ClosedChannelException 怎么也想不到是这个问题啊。

解决办法

    确保所有引用的 Dotnetty*.dll 均同源,再运行就好了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值