diff options
Diffstat (limited to 'usr.sbin/portsnap/phttpget')
-rw-r--r-- | usr.sbin/portsnap/phttpget/phttpget.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/usr.sbin/portsnap/phttpget/phttpget.c b/usr.sbin/portsnap/phttpget/phttpget.c index 315af00..ffd14c3 100644 --- a/usr.sbin/portsnap/phttpget/phttpget.c +++ b/usr.sbin/portsnap/phttpget/phttpget.c @@ -211,7 +211,7 @@ makerequest(char ** buf, char * path, char * server, int connclose) env_HTTP_PROXY ? server : "", path, server, env_HTTP_USER_AGENT, proxyauth ? proxyauth : "", - connclose ? "Connection: Close\r\n" : ""); + connclose ? "Connection: Close\r\n" : "Connection: Keep-Alive\r\n"); if (buflen == -1) err(1, "asprintf"); return(buflen); @@ -307,6 +307,7 @@ main(int argc, char *argv[]) int nreq = 0; /* Number of next request to send */ int nres = 0; /* Number of next reply to receive */ int pipelined = 0; /* != 0 if connection in pipelined mode. */ + int keepalive; /* != 0 if HTTP/1.0 keep-alive rcvd. */ int sd = -1; /* Socket descriptor */ int sdflags = 0; /* Flags on the socket sd */ int fd = -1; /* Descriptor for download target file */ @@ -444,6 +445,7 @@ main(int argc, char *argv[]) statuscode = 0; contentlength = -1; chunked = 0; + keepalive = 0; do { /* Get a header line */ error = readln(sd, resbuf, &resbuflen, &resbufpos); @@ -497,11 +499,16 @@ main(int argc, char *argv[]) continue; } - /* Check for "Connection: close" header */ + /* + * Check for "Connection: close" or + * "Connection: Keep-Alive" header + */ if (strncmp(hln, "Connection:", 11) == 0) { hln += 11; if (strstr(hln, "close") != NULL) pipelined = 0; + if (strstr(hln, "Keep-Alive") != NULL) + keepalive = 1; /* Next header... */ continue; @@ -673,7 +680,7 @@ main(int argc, char *argv[]) * If necessary, clean up this connection so that we * can start a new one. */ - if (pipelined == 0) + if (pipelined == 0 && keepalive == 0) goto cleanupconn; continue; |