private void AcceptHandle(SocketAsyncEventArgs args) { // Capture References var acceptedSocket = args.AcceptSocket; var socketError = args.SocketError; var successful = (args.SocketError == SocketError.Success); var aborted = (args.SocketError == SocketError.OperationAborted); // Free Resources ReleaseSocketArgs(args); // return borrowed event args. // Process if (successful) { var clientSocket = new NetSocket(Address, BufferPool, SocketPool, acceptedSocket); OnAccepted(clientSocket); // AcceptAsync(); Ask caller to loop. } else { Disconnect(acceptedSocket); if (!aborted) { RaiseFault(socketError, "Failed to handle accepting of a client socket."); } } }
public void Bind(int port, string host) { Address = NetAddress.Resolve(port, host, Options.IPv4Only); Socket = new NetSocket(Address, BufferPool, SocketArgPool); Socket.OnAccepted = HandleAccept; Socket.Listen(Options.MaxAccept); OnListen(this); StartAccept(); }