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; } } }
//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); }