coost icon indicating copy to clipboard operation
coost copied to clipboard

多次重连服务器失败,co::connect返回false, co::error()返回0

Open neoblackcap opened this issue 3 years ago • 3 comments

在生产环境中,我实现了一个高可用机制。在节点失效后,客户端自动重连其他节点。同时有其他守护进程会巡检节点,如果节点恢复之后就把其加入回可用节点列表。

问题的情况是,最开始有两个服务器,节点1失效切换到节点2是没问题的。但是在第一次切换之后,节点2切换回节点1(强制杀死节点2)的过程中。客户端与节点1重新建立连接,co::connect返回false, 但是co::error()返回0。具体平台是windows 10。

neoblackcap avatar Aug 01 '22 07:08 neoblackcap

@neoblackcap co::connect 返回值是 int 类型,返回0 表示连接成功

idealvin avatar Aug 01 '22 10:08 idealvin

@idealvin 是我描述错了,应该是co::connect返回是非0的值,但是co::error返回0

neoblackcap avatar Aug 01 '22 14:08 neoblackcap

看下源码 src/co/sock_win.cc,检查下有没有打印出什么日志

idealvin avatar Aug 02 '22 00:08 idealvin

@neoblackcap 这个问题有什么进展么?

idealvin avatar Aug 09 '22 11:08 idealvin

@idealvin 非常奇怪,换了新版本的话,co::error不返回0了,但是在明确是使用TCP的情况下,co::connect一样返回false,co::error则是WSAENOTCONN

之前是使用vcpkg提供的2.0.3,现在是使用github上面的master分支

neoblackcap avatar Aug 09 '22 19:08 neoblackcap

能贴一下你的代码吗?

idealvin avatar Aug 10 '22 00:08 idealvin

已经排查出原因了,跟这个没有关系。我再开一个issue讨论原因,是跟co::Event有关系

neoblackcap avatar Aug 10 '22 17:08 neoblackcap