Я пишу прокси на C в ядре Linux 3.0.Прокси-сервер перенаправляет запрос из браузера на целевой сервер и читает ответ от сервера.
Это один запрос:
GET http://www.yongchuan.org/ HTTP/1.1
Host: www.yongchuan.org
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Proxy-Connection: keep-alive
Это один ответ, который прокси-сервер прочитал:
HTTP/1.1 200 OK
Content-Length: 3170
Content-Type: text/html
Content-Location: http://www.yongchuan.org/index.html
Last-Modified: Fri, 22 Jul 2011 01:28:50 GMT
Accept-Ranges: bytes
ETag: "72d9d7b5e48cc1:1a73"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Sun, 04 Mar 2012 16:26:05 GMT
<html>
<head>
..............
<tr>
<td width="43%" ></td>
<td width="46%"></td>
</tr>
<tr>
<td width="43%"><img src="images/triangle.gif"> ��ѧ�ڿγ̣�<a href="jiangyi/yytl/2007(a)/yytl.htm">Ӧ��ͼ��</a></td>
<td width="46%" ><img src=
Проблема в том, что фактический размер байтов, которые читает прокси-сервер, равен 2880, и данные неожиданно заканчиваются, намного меньше, чем длина контекста: 3170.
Мой код такой, как показано ниже:
241 int readlen;
242 char buffer[128 * 4096];
243 do {
244 readlen = read(servfd, buffer, 128 * 4096);
245 printf("readlen:%d\n", readlen);
246 if( readlen < 0 ) {
247 perror("read() from server failed");
248 }
249 printf("read content:\n%s", buffer2);
250 write(cliefd, buffer, readlen);
251 } while( readlen == 128 * 4096 );
Здесь servfd - это сокет для сервера, cliefd - это сокет для клиента.Какова возможная причина?Спасибо!