/// <summary>
        /// Start the log
        /// </summary>
        /// <param name="eventListener"></param>
        public FLHookEventSocket(FLHookListener eventListener, LogRecorderInterface log)
        {
            this.eventListener = eventListener;
            this.log           = log;
            if (this.eventListener != null)
            {
                receiveEventThread              = new Thread(new ThreadStart(ReceiveEventThread));
                receiveEventThread.Name         = "FLEventReceive";
                receiveEventThread.IsBackground = true;
                receiveEventThread.Start();

                cfgCheckerThread              = new Thread(new ThreadStart(ConfigurationCheckerThread));
                cfgCheckerThread.Name         = "FLEventReceiveCfgChecker";
                cfgCheckerThread.IsBackground = true;
                cfgCheckerThread.Start();
            }
        }
        /// <summary>
        /// Shutdown the socket.
        /// </summary>
        public void Shutdown()
        {
            eventListener = null;

            if (cfgCheckerThread != null)
            {
                cfgCheckerThread.Abort();
                cfgCheckerThread = null;
            }

            // Close the socket to terminate any blocking reads,
            // terminate the thread and wait for it to shutdown.
            if (receiveEventThread != null)
            {
                CloseSocket();
                receiveEventThread.Abort();
                receiveEventThread = null;
            }
        }