大猩猩golang websocket.在windows下不正确工作?



我有一个例程,试图检测一个websocket错误,而读取是一个UnexpectedCloseError。这是代码…

有一个变量:

myWebsocket                      *websocket.Conn
我的方法是:
messageType, data, err := myWebsocket.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err) {
log.Debugf("WebsocketReadDataMessage: unexpected close error: %v", err)
} else {
log.Warnf("EXTRANGE!!!!: WebsocketReadDataMessage: error: %v", err)
}
return err
}

在windows下运行此代码,有时websocket关闭,但调用websocket。IsUnexpectedCloseError返回"false";我得到了一个错误的文本"EXTRANGE!!!!: WebsocketReadDataMessage: error: wsarecv:一个已存在的连接被远程主机强制关闭。">

搜索"wsarecv"我已经看到它是一个winsock2函数:https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsarecv

为什么IsUnexpectedCloseError不将此错误视为"unexpected closeerror"?这是一个bug还是我做错了什么?我能做些什么来

websocket.IsUnexpectedCloseError()函数在Windows下正常工作。没有依赖于平台代码在函数。

函数websocket。IsUnexpectedCloseError返回一个布尔值,指示错误是否为代码不在预期代码列表中的*websocket.CloseError*websocket.CloseError表示对端发送的关闭消息。*websocket.CloseError不表示底层网络连接已关闭。根据文档中的示例,该函数旨在帮助调试。

听起来你的目标是确定连接何时不再可用。ReadMessage()返回任何错误后,连接不可用。如果出现错误,请关闭连接并重新连接。

messageType, data, err := myWebsocket.ReadMessage()
if err != nil {
myWebsocket.Close()
return err
}