internal void DelayClose(LPSocker socker) { if (LOG_ERROR(socker != null)) { goto Exit0; } lock (m_DelayLocker) { socker.DelayCloseBeginTick = DateTime.Now.Ticks; if (socker.IsPassiveClosed) { //被动关闭,无需延迟close socket socker.DelayCloseDuration = 0; } else { //主动关闭,需要等未发送完的数据发送完 socker.DelayCloseDuration = 3000; } m_DelayCloseList.PushRear(socker); } Exit0: return; }
internal void DelayRelease(LPSocker socker) { if (LOG_ERROR(socker != null)) { goto Exit0; } lock (m_DelayLocker) { socker.DelayReleaseBeginTick = DateTime.Now.Ticks; if (socker.IsPassiveClosed) { //被动关闭,无需延迟close socket socker.DelayReleaseDuration = 0; } else { //主动关闭,需要延迟释放,因为socker的close操作只关闭了发, //如果不延迟释放,可能在收的过程访问到被释放的socker socker.DelayReleaseDuration = 1500; } m_DelayReleaseList.PushRear(socker); } Exit0: return; }
internal LPSocker CreateSocker(Socket socket, ILPPacketParser packetParser, object parent, bool isAcceptCreate) { bool result = false; LPSocker socker = null; if (LOG_ERROR(socket != null)) { goto Exit0; } if (LOG_ERROR(packetParser != null)) { goto Exit0; } socker = new LPSocker(); if (LOG_ERROR(packetParser != null)) { goto Exit0; } socker.ID = _GenerateSockerID(); socker.Sock = socket; socker.Parent = parent; socker.IsAcceptCreate = isAcceptCreate; socker.IsClosed = false; socker.IsSending = false; socker.PacketParser = packetParser; socker.RecvBuf = new LPLoopBuf(); if (LOG_ERROR(socker.RecvBuf != null)) { goto Exit0; } result = socker.RecvBuf.Init(LP.RecvBufSize); if (LOG_ERROR(result)) { goto Exit0; } socker.SendBuf = new LPLoopBuf(); if (LOG_ERROR(socker.SendBuf != null)) { goto Exit0; } result = socker.SendBuf.Init(LP.SendBufSize); if (LOG_ERROR(result)) { goto Exit0; } lock (m_ValidListLocker) { result = m_ValidSockerList.PushRear(socker); if (LOG_ERROR(result)) { goto Exit0; } } return(socker); Exit0: return(null); }