Example #1
0
        /// <summary>
        /// Initializes the server by preallocating reusable buffers and context objects.  These objects do not
        /// need to be preallocated or reused, by is done this way to illustrate how the API can easily be used
        /// to create reusable objects to increase server performance.
        /// </summary>
        public void Init()
        {
            // Allocates one large byte buffer which all I/O operations use a piece of.  This gaurds
            // against memory fragmentation
            m_bufferManager.InitBuffer();

            // preallocate pool of SocketAsyncEventArgs objects
            SocketAsyncEventArgs readWriteEventArg;
            AsyncUserToken       asyncUserToken;
            HttpProtocolParser   httpParser;

            m_numConnectedSockets = 0;

            for (int i = 0; i < m_numConnections; i++)
            {
                //Pre-allocate a set of reusable SocketAsyncEventArgs
                readWriteEventArg            = new SocketAsyncEventArgs();
                httpParser                   = new HttpProtocolParser();
                asyncUserToken               = new AsyncUserToken();
                asyncUserToken.HttpParser    = httpParser;
                readWriteEventArg.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);

                readWriteEventArg.UserToken = asyncUserToken;

                // assign a byte buffer from the buffer pool to the SocketAsyncEventArg object
                m_bufferManager.SetBuffer(readWriteEventArg);

                // add SocketAsyncEventArg to the pool
                m_readWritePool.Push(readWriteEventArg);
            }
        }
Example #2
0
 public AsyncUserToken(Socket socket, HttpProtocolParser httpParser)
 {
     m_socket = socket;
     m_parser = httpParser;
 }