Exemplo n.º 1
0
        public override void Close(string reason)
        {
            base.Close(reason);

            if (m_closePending)
            {
                return;
            }

            m_closePending = true;             // Avoid a loop with FatalLog(reason)

            try
            {
                if (m_socket != null)
                {
                    if (reason != "Disconnect")
                    {
                        LogFatal(reason);
                    }
                    m_socket.Shutdown(SocketShutdown.Both);
                    m_socket.Close();
                }
            }
            catch
            {
            }

            ClientDisconnectSignal.Set();
        }
Exemplo n.º 2
0
        public override void MainLoop()
        {
            base.MainLoop();

            try
            {
                int port = Constants.PortSpot;
                if (m_serviceMode)
                {
                    port = Constants.PortService;
                }

                if (m_cmdline.ContainsKey("port"))
                {
                    port = Convert.ToInt32(m_cmdline["port"]);
                }

                IPAddress ipAddress = IPAddress.Loopback;
                m_localEndPoint = new IPEndPoint(ipAddress, port);

                LogDebug("Listen on localhost, port " + port.ToString() + ", " + (m_serviceMode ? "Service mode" : "Spot mode"));

                Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                listener.Bind(m_localEndPoint);
                listener.Listen(100);

                while (true)
                {
                    m_socket = null;
                    m_sb.Clear();
                    m_closePending = false;

                    LogDebug("Waiting connection");

                    ClientDisconnectSignal.Reset();

                    listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);

                    ClientDisconnectSignal.WaitOne();

                    if (m_serviceMode == false)
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Close(ex.Message);
            }

            LogDebug("Clean end");
        }