dart-lang/web_socket_channel

๐Ÿ› RangeError (code): Invalid value: Not in inclusive range 3000..4999: 1000 after updating to 3.0.0 from 2.4.0

Closed this issue ยท 6 comments

Hello after upgrading the package from 2.4.0 to 3.0.0 calling close seems to throw (was tested and full working before upgrading) am I missing something ?

For a bit of context the code sends audio data to a server, which returns the transcription
First I start the connection :

  Future<void> start() async {
    _wsChannel = WebSocketChannel.connect(
      buildUrl(_baseLiveUrl, null, queryParams),
      protocols: ['token', apiKey],
    );
    await _wsChannel.ready;

    _wsChannel.stream.listen((event) {
      if (_outputTranscriptStream.isClosed) {
        close();
      } else {
        _outputTranscriptStream.add(...)
      }
    }, onDone: () {
      close();
    }, onError: (error) {
      _outputTranscriptStream.addError(...)
    });

    inputAudioStream.listen((data) {
      if (_wsChannel.closeCode != null) {
        close();
      } else {
        _wsChannel.sink.add(data);
      }
    }, onDone: () {
      close();
    });
  }

The error occurs in the close method :

  Future<void> close() async {
    await _wsChannel.sink.close(status.normalClosure); <------ this throws the following error
    await _outputTranscriptStream.close();
  }

The error :

  RangeError (code): Invalid value: Not in inclusive range 3000..4999: 1000
  dart:core                                                          RangeError.checkValueInInterval
  package:web_socket/src/utils.dart 10:16                            checkCloseCode
  package:web_socket/src/io_web_socket.dart 108:5                    IOWebSocket.close
  package:web_socket_channel/adapter_web_socket_channel.dart 112:27  new AdapterWebSocketChannel.<fn>.<fn>
  package:stream_channel                                             _GuaranteeSink.close
  package:async/src/delegate/stream_sink.dart 47:27                  DelegatingStreamSink.close
  package:web_socket_channel/adapter_web_socket_channel.dart 147:18  _WebSocketSink.close
  package:deepgram_speech_to_text/src/deepgram.dart 68:27            DeepgramLiveTranscriber.close
  package:deepgram_speech_to_text/src/deepgram.dart 62:7             DeepgramLiveTranscriber.start.<fn>

This issue makes our backend leaking connection ๐Ÿ˜ฉ

Same issue here when closing the socket. Any updates?

I investigated a bit, and internally they use code 3001 when the client is told to close the socket, and 3005 when the client closes the connection at their end.

This is not the standard, and should be fixed. Also, the error comes from https://pub.dev/packages/web_socket, so I think this issue should be closed.

Yeah, the issue has been closed in web_socket 0.1.5 โ€“ 1000 close code is now allowed.

We should update the docs, because channel.sink.close(status.goingAway) will give this error.

I have the some problem. web_socket_channel needs to depend on web_socket 0.1.5 if you want to close with 1000.