private void onConnect(IAsyncResult ar)
        {
            try
            {
                socket.BeginAccept(onConnect, null);
            }
            catch
            {
                Status = EthernetListener.ConnectionStatus.Disconnected;
            }

            Socket worker = null;

            try
            {
                worker = socket.EndAccept(ar);
                ListenerClient client = new ListenerClient(worker, LocalPort, base.Retry, base.TimeOut);

                System.Threading.Thread.Sleep(1000);
                PLC plc = PLCFactory.GetPLC(client, 0);
                if (OnConnectionAccepted != null)
                {
                    OnConnectionAccepted(plc);
                }
            }
            catch
            {
                if (worker != null)
                {
                    worker.Close();
                }
            }
        }
        /// <summary>
        /// Closes the Socket connection and releases all associated resources.
        /// </summary>
        public override void Disconnect()
        {
            if (base.QueueCount != 0)
            {
                return;
            }

            try
            {
                socket.Close();
                Status = EthernetListener.ConnectionStatus.Disconnected;
            }
            catch
            {
            }
        }
 internal void Listen()
 {
     lock (lockObj)
     {
         if (Status == EthernetListener.ConnectionStatus.Disconnected || socket == null)
         {
             try
             {
                 listen();
                 Status = EthernetListener.ConnectionStatus.Listening;
             }
             catch
             {
                 throw new ComDriveExceptions(
                           "Failed binding local port " + m_LocalPort.ToString() +
                           ". Please check that the port is not in use",
                           ComDriveExceptions.ComDriveException.PortInUse);
             }
         }
     }
 }