void AcceptCb(IAsyncResult ar) { try { Socket socket = listenfd.EndAccept(ar); int index = NewIndex(); if (index < 0) { Console.WriteLine("[ServNet.AcceptCb] conns is full."); } else { Conn conn = conns[index]; conn.Init(socket); conn.socket.BeginReceive( conn.readBuff, conn.buffCount, conn.BufferRemain(), SocketFlags.None, ReceiveCb, conn); } listenfd.BeginAccept( AcceptCb, null); } catch (Exception ex) { Console.WriteLine("[ServNet.AcceptCb] Accept socket fail. " + ex.Message); } }
void ReceiveCb(IAsyncResult ar) { Conn conn = (Conn)ar.AsyncState; try { int count = conn.socket.EndReceive(ar); if (count > 0) { conn.buffCount += count; ProcessData(conn); } conn.socket.BeginReceive( conn.readBuff, conn.buffCount, conn.BufferRemain(), SocketFlags.None, ReceiveCb, conn); } catch (Exception ex) { Console.WriteLine("[ServNet.ReceiveCb] Receive byte fail." + ex.Message); conn.Close(); } }