C代理服务器丢弃请求

时间:2013-10-27 13:10:34

标签: c sockets http proxy httprequest

我有一个很小的C代理服务器,我只想从客户端一次获取并从服务器发回响应。 没有流水线,没有任何高级功能,只是一个持久的http连接

的Structs:

typedef struct http_request {
   char* h_data;           // Header raw data
   int   h_size;           // Header size

   char  host[5000];       // Host to connect to
   char  resource[5000];   // Resource to get
} http_request;


typedef struct http_response {
   char* h_data;           // Header raw data
   int   h_size;           // Header size

   char* b_data;           // Body raw data
   int   b_size;           // Content-length of the body
} http_response;

代码:

while(1){

   // Waiting for user to connect
   int sock_user = accept(sock, (struct sockaddr*)NULL, NULL);
   int sock_host=-1;

   // Accept 1 request at a time and respond
   while(1){

      http_request req;
      http_response resp;


      // 1. Client ==> Proxy     Server
      http_parse_request(sock_user, &req);     // uses recv(sock_user)


      // 2. Client     Proxy ==> Server
      if (sock_host < 0)
         sock_host=proxy_connect_host(req.host);
      write(sock_host, req.h_data, req.h_size);


      // 3. Client     Proxy <== Server
      http_parse_response(sock_host, &resp);   // uses send(sock_host)

      // 4. Client <== Proxy     Server
      write(sock_user, resp.h_data, resp.h_size);
      write(sock_user, resp.b_data, resp.b_size);
   }

}

现在这适用于几页首页。然后程序在步骤1阻止,浏览器始终只显示Waiting for www.calcoolate.com...

萤火虫: enter image description here

所有 GET 都是发送到我的代理的请求。然而,我只收到前两个。我仔细检查了每个write()recv()的返回值,它们似乎与预期的完全匹配。我检查了-1和0。

我的代理逻辑一定有问题..有什么想法吗?

0 个答案:

没有答案