umbracle/ethgo

Need a way to detect connection errors of websocket

Opened this issue · 2 comments

bynil commented

The error that occurred in stream reading is ignored now.

var err error
buf, err = s.codec.Read(buf[:0])
if err != nil {
if !s.isClosed() {
// log error
}
return
}

When we subscribe an event and get no messages, we can not know if the underlying websocket connection is healthy(the network may be down).

Maybe we should add a callback for all unexpected connection errors.

eg.
Subscribe(method string, callback func(b []byte), errHandler func(err error)) (func() error, error)

The proposal sounds okay. Can you share the error you get from the stream?

bynil commented

The proposal sounds okay. Can you share the error you get from the stream?

I subscribed for new heads:

	events := make(chan []byte, 10000)
	closeFn, err = WsRPC.Subscribe("newHeads", func(b []byte) {
		events <- b
	})

Then disable the network, will get a CloseError from gorilla/websocket:
https://github.com/gorilla/websocket/blob/af47554f343b4675b30172ac301638d350db34a5/conn.go#L105

image