contrib
contrib copied to clipboard
🐛 [Bug]: Can't close websocket connection
Bug Description
I want to close a websocket connection but nothing happens (no error etc.). The client remains connected and can also send messages.
How to Reproduce
Steps to reproduce the behavior:
- Run the code below
- Connect to the server with a websocket client
Expected Behavior
The server should close the connection after 5 seconds
Contrib package Version
websocket/v1.1.0
Code Snippet (optional)
package main
import (
"log"
"time"
"github.com/gofiber/contrib/websocket"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
app.Use("/ws", middleware)
app.Get("/ws", websocket.New(handler))
log.Fatal(app.Listen(":8080"))
}
func middleware(c *fiber.Ctx) error {
if websocket.IsWebSocketUpgrade(c) {
return c.Next()
}
return fiber.ErrUpgradeRequired
}
func handler(conn *websocket.Conn) {
go func() {
time.Sleep(5 * time.Second)
if err := conn.Close(); err != nil {
log.Fatal(err)
}
}()
for {
_, msg, err := conn.ReadMessage()
if err != nil {
log.Println(err)
return
}
log.Printf("msg: %s", msg)
}
}
Checklist:
- [X] I agree to follow Fiber's Code of Conduct.
- [X] I have checked for existing issues that describe my problem prior to opening this one.
- [X] I understand that improperly formatted bug reports may be closed without explanation.
@mstrYoda Any idea what may be causing this?
Hi, you can not close a hijacked connection in this way. It is basically do nothings.
You can just return from the websocket handler function and it closes underlying connection after exiting handler.
Returning directly from the websocket handler worked. But for what purpose is the (*websocket.Conn).Close() func if it can't close the connection?