void OnAcceptCallBack(IAsyncResult ar) { Packet packet = ar.AsyncState as Packet; NetSocket newSocketCtx = packet.socketCtx; //接收结果 newSocketCtx.sock = listenSocket.sock.EndAccept(ar); newSocketCtx.SetSocketState(SocketState.CONNECTED_CLIENT); newSocketCtx.UpdataTimeStamp(); Packet newPacket = newSocketCtx.CreatePacket(dePacketor.GetMaxBufferSize()); serverTaskMgr.PostServerMessage(ServerMessage.SMSG_ACCEPT_CLIENT, newPacket); //继续接受客户端的请求 serverTaskMgr.PostSingleIocpAccpetTask(packet); }
bool CreateListener() { Server server = GetServer(); NetSocket listenCtx = null; // 生成用于监听的Socket的信息 if (listenCtx == null) { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listenCtx = new NetSocket(this); listenCtx.sock = sock; } listenCtx.SetSocketType(NetSocketType.LISTENER_SOCKET); if (null == listenCtx.sock) { listenCtx.SetSocketState(SocketState.INIT_FAILD); SocketError(listenCtx); //LOG4CPLUS_ERROR(log.GetInst(), "初始化Socket失败,错误代码:"<<_GetLastError()); return(false); } SetListenerContext(listenCtx); socketMap[listenCtx.GetID()] = listenCtx; //实例一个网络端点 传入地址和端口 IPEndPoint serverEP = new IPEndPoint(IPAddress.Any, 23456); //绑定网络端点 listenCtx.sock.Bind(serverEP); //设置最大监听数量 listenCtx.sock.Listen(0x7fffffff); listenCtx.SetSocketState(SocketState.LISTENING); serverTaskMgr.PostServerMessage(ServerMessage.SMSG_LISTENER_CREATE_FINISH, null); return(true); }