示例#1
0
        static unsafe void ProcessSocket(RioBufferSegment s, ServeState state)
        {
            uint current = 0;
            var  r       = s.CurrentContentLength;
            var  reqs    = 0;

            if (r == 0)
            {
                state.reader.Dispose();
                state.socket.Dispose();
                return;
            }

            for (int i = 0; state.leftoverLength != 0 && i < 4 - state.leftoverLength; i++)
            {
                current += s.DataPointer[i];
                current  = current << 8;
                if (current == endOfRequest)
                {
                    reqs++;
                }
            }

            state.leftoverLength = r % 4;
            var length = r - state.leftoverLength;

            byte *currentPtr = s.DataPointer + state.oldleftoverLength;

            var start = currentPtr;
            var end   = currentPtr + length;

            for (; start <= end; start++)
            {
                if (*(uint *)start == endOfRequest)
                {
                    reqs++;
                }
            }

            state.oldleftoverLength = state.leftoverLength;

            for (int i = r - state.leftoverLength; i < r; i++)
            {
                current += s.DataPointer[i];
                current  = current << 4;
            }

            state.socket.Send(reqz[reqs]);
        }
示例#2
0
        static unsafe void ProcessSocket(RioBufferSegment s, ServeState state) {
            uint current = 0;
            var r = s.CurrentContentLength;
            var reqs = 0;

            if (r == 0)
            {
                state.reader.Dispose();
                state.socket.Dispose();
                return;
            }

            for (int i = 0; state.leftoverLength != 0 && i < 4 - state.leftoverLength; i++)
            {
                current += s.DataPointer[i];
                current = current << 8;
                if (current == endOfRequest)
                    reqs++;
            }

            state.leftoverLength = r % 4;
            var length = r - state.leftoverLength;

            byte* currentPtr = s.DataPointer + state.oldleftoverLength;

            var start = currentPtr;
            var end = currentPtr + length;

            for (; start <= end; start++)
            {
                if (*(uint*)start == endOfRequest)
                    reqs++;
            }
            
            state.oldleftoverLength = state.leftoverLength;

            for (int i = r - state.leftoverLength; i < r; i++)
            {
                current += s.DataPointer[i];
                current = current << 4;
            }

            state.socket.Send(reqz[reqs]);
        }