Receive a webpage(with chunked encoding) using .Net Socket
===

I'm trying to load Facebook main page with .net socket and proxy, problem is first chunk size is 32728 but what i can see is the first chunk is about 58 byte more than what it should be.

**Note** 

 - Using WebClient and HttpWebRequest is not an option here, i need to
   use TcpClient and Socket. 
 - I'l be happy if i could use them but control the connection and data myself.

1.Connect to proxy and Send Get Request

    var proxy = new HttpProxyClient("212.62.97.20", 8080);
    var client = proxy.CreateConnection(host, 80);
    client.Client.Send(Encoding.ASCII.GetBytes(String.Format("GET / HTTP/1.1\r\nHost: {0}\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1\r\n\r\n", host)));

2.Read and Parse Headers

    var ProtocolVersion = new Version(1, 0);
    var StatusCode = HttpStatusCode.OK;
    var StatusDescription = "OK";
    var Headers = new WebHeaderCollection();

    // parse http headers
    var headerIndex = 0;
    while (true)
    {
		 var httpHeader = reader.ReadLine();
			
		  // parsing header completes
		  if (String.IsNullOrWhiteSpace(httpHeader))
			   break;

		  if (headerIndex == 0)
		  {
			 var headerElements = Regex.Match(httpHeader, @"HTTP/(\d+(?:\.\d*)?|\.\d+)\s(\d{3})\s(.*)").Groups;
				ProtocolVersion = Version.Parse(headerElements[1].Value);
				StatusCode = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), headerElements[2].Value);
				StatusDescription = headerElements[3].Value;
			}
			else
			{
				var headerElements = Regex.Match(httpHeader, @"^\$?([\w\d\-]*):\s(.*)$").Groups;
				Headers.Add(headerElements[1].Value, headerElements[2].Value);
			}
			headerIndex++;
		}

		// reading content
		if (Headers[HttpResponseHeader.TransferEncoding].ToUpperInvariant().IndexOf("CHUNKED") >= 0)
		{
			while (true)
			{
				var nextChunkSize = 0;
				GetChunkSize(reader, out nextChunkSize);

				// read LF
				reader.Read();

				var nextChunkData = new char[nextChunkSize];

				var received = 0;

                // nextChunkSize first time is 32728 but after reaching it
                // i can see i have read 58 byte more and i past the
                // next chunk-size bytes
				while (received < nextChunkSize)
				{
					received += reader.Read(nextChunkData, received, nextChunkSize - received);
				}

				var nextChunkString = new String(nextChunkData);
			}
		}
	}

Also i add that my real target is to just load any webpage using Socket, with my own HTTP rules.