Ejemplo n.º 1
0
        private void CheckTimeout()
        {
            DateTime dt = DateTime.Now;
            List <SYNScanTaskInfo> lst_remove = new List <SYNScanTaskInfo>();

            while (true)
            {
                Thread.Sleep(1000);
                lst_remove.Clear();
                dt = DateTime.Now;
                bool bDisposed = base._IsDisposed;
                lock (m_dic_task_running) {
                    foreach (var v in m_dic_task_running)
                    {
                        if (!v.Value.IsStarted)
                        {
                            continue;
                        }
                        if (dt.Subtract(v.Value.StartTime).TotalMilliseconds > v.Value.TotalTimeout || bDisposed)
                        {
                            lst_remove.Add(v.Value);
                            continue;
                        }
                        if (dt.Subtract(v.Value.LastTime).TotalMilliseconds > v.Value.Timeout)
                        {
                            if (v.Value.RunedRetry++ < v.Value.Retry)
                            {
                                RawSocket.SendData(v.Value.SYNPacket, 0, v.Value.SYNPacket.Length);// this.SendData(v.Value);
                                v.Value.LastTime = DateTime.Now;
                            }
                            else
                            {
                                lst_remove.Add(v.Value);
                            }
                        }
                    }
                    foreach (var v in lst_remove)
                    {
                        this.EndTask(v);
                    }
                }
                if (bDisposed)
                {
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        //private SocketAsyncEventArgs PopSAE() {
        //    lock (m_obj_sync) {
        //        if (m_que_sae.Count != 0) return m_que_sae.Dequeue();
        //    }
        //    SocketAsyncEventArgs sae = new SocketAsyncEventArgs();
        //    sae.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);
        //    sae.SetBuffer(new byte[40], 0, 40);
        //    return sae;
        //}

        //private void PushSAE(SocketAsyncEventArgs sae) {
        //    lock (m_obj_sync) {
        //        if (base._IsDisposed) return;
        //        m_que_sae.Enqueue(sae);
        //    }
        //}

        protected override uint OnScan(int nPort, EndPoint endPoint, int nProbes, int nTimeout, int nRetry, int nTotalTimeout, bool bUseNullProbe)
        {
            lock (m_obj_sync) {
                if (base._IsDisposed)
                {
                    throw new ObjectDisposedException("SYNScanner", "The scanner was disposed");
                }
            }
            m_se.WaitOne();
            SYNScanTaskInfo ti = this.CreateTaskInfo(nPort, endPoint, nProbes, nTimeout, nRetry, nTotalTimeout, bUseNullProbe);

            lock (m_dic_task_running) {
                m_dic_task_running.Add(ti.TaskID, ti);
            }
            //this.SendData(ti);
            RawSocket.SendData(ti.SYNPacket, 0, ti.SYNPacket.Length);
            ti.StartTime = ti.LastTime = DateTime.Now;
            ti.IsStarted = true;
            return(ti.TaskID);
        }