/// <summary> /// 接收数据 /// </summary> private void OnReceive(IAsyncResult ar) { SendRecvBuffer buffer = (SendRecvBuffer)ar.AsyncState; ar.AsyncWaitHandle.Close(); try { if (buffer.Socket == null) { return; } lock (m_sync_lock) { int len = buffer.Socket.EndReceive(ar); if (!m_user_tokens.ContainsKey(buffer.ConnId)) { return; } if (len > 0) { if (OnMessage != null) { OnMessage(buffer.ConnId, buffer.Buffer, len); } //派发消息的时候,有可能上层逻辑关闭了当前连接,必须再判断一次当前连接是否正常 if (m_user_tokens.ContainsKey(buffer.ConnId)) { this.BeginReceive(buffer); } else { m_buffer_pools.Despawn(buffer); } } else { Log.Error("OnReceive Recv Error"); m_buffer_pools.Despawn(buffer); this.CloseClientSocket(buffer.ConnId); } } } catch (SocketException e) { if (e.ErrorCode != 10054) { Log.Exception(e); } m_buffer_pools.Despawn(buffer); this.CloseClientSocket(buffer.ConnId); } catch (Exception e) { Log.Exception(e); m_buffer_pools.Despawn(buffer); this.CloseClientSocket(buffer.ConnId); return; } }
private void OnSend(IAsyncResult ar) { ar.AsyncWaitHandle.Close(); SendRecvBuffer buffer = (SendRecvBuffer)ar.AsyncState; //已经断开连接 if (buffer.Socket == null || !buffer.Socket.Connected) { this.Close(); return; } try { buffer.Socket.EndSend(ar); m_buffer_pools.Despawn(buffer); } catch (Exception e) { Log.Exception(e); this.Close(); } }