【发布时间】:2021-10-15 01:38:54
【问题描述】:
我有一个例程尝试检测读取时的 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://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsarecv
为什么 IsUnexpectedCloseError 不将此错误视为“UnexpectedCloseError”?这是一个错误还是我做错了什么?我能做什么
【问题讨论】:
-
感谢您的回答 Cerise。我试图区分是否由于意外的 websocket 关闭而发生读取错误。如果意外关闭,我将尝试重新打开 websocket。我不明白为什么会出现“wsarecv:现有连接被远程主机强制关闭”的错误。不是 *websocket.CloseError。
-
我怎么知道websocket的底层网络连接是否已经关闭,我需要重新打开websocket连接,因为“wsarecv:现有连接被强行关闭”远程主机。”错误?
标签: windows go websocket gorilla