kerryjiang / WebSocket4Net

A popular .NET WebSocket Client
Apache License 2.0
764 stars 273 forks source link

Closed behaviour change after 0.14.1 #138

Open ghost opened 6 years ago

ghost commented 6 years ago

I am trying to connect to a server (that may be offline) with the following code:

using System;
using WebSocket4Net;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var WebSocketConn = new WebSocket("wss://example.com/socket", version: WebSocketVersion.Rfc6455);
            WebSocketConn.Opened += WebSocketConn_Opened;
            WebSocketConn.Closed += WebSocketConn_Closed;
            WebSocketConn.MessageReceived += WebSocketConn_MessageReceived;
            WebSocketConn.Error += WebSocketConn_Error;
            WebSocketConn.Open();
            Console.ReadKey(true);
        }

        private static void WebSocketConn_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
        {
            Console.WriteLine("Error: {0}", e.Exception);
        }

        private static void WebSocketConn_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            Console.WriteLine("Message Received: {0}", e.Message);
        }

        private static void WebSocketConn_Closed(object sender, EventArgs e)
        {
            Console.WriteLine("Closed");
        }

        private static void WebSocketConn_Opened(object sender, EventArgs e)
        {
            Console.WriteLine("Opened");
        }
    }
}

With 0.14.1, the output is:

Error: System.Exception: HTTP/1.1 502 Bad Gateway
Closed

With 0.15.2, the output is:

Error: System.Exception: HTTP/1.1 502 Bad Gateway
Closed
Error: System.Net.Sockets.SocketException (0x80004005): A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
Closed

Note the unhandled exception and duplicate Closed events.