contrib icon indicating copy to clipboard operation
contrib copied to clipboard

🐛 [Bug]: Can't close websocket connection

Open mxgnus-de opened this issue 1 year ago • 3 comments

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:

  1. Run the code below
  2. 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.

mxgnus-de avatar Jul 26 '23 21:07 mxgnus-de

@mstrYoda Any idea what may be causing this?

gaby avatar Jul 28 '23 02:07 gaby

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.

mstrYoda avatar Jul 28 '23 09:07 mstrYoda

Returning directly from the websocket handler worked. But for what purpose is the (*websocket.Conn).Close() func if it can't close the connection?

mxgnus-de avatar Jul 29 '23 13:07 mxgnus-de