sent = 0;
eof = 0;
- while(!eof || (buf->d > 0)) {
+ while((!eof || (buf->d > 0)) && ((max < 0) || (sent < max))) {
if(!eof && (buf->d < buf->s) && ((max < 0) || (sent + buf->d < max))) {
while(1) {
ret = recv(src, buf->b + buf->d, buf->s - buf->d, MSG_DONTWAIT);
vavar(struct sockaddr_storage, name);
int cfd;
char old;
- char *hd;
+ char *hd, *p;
struct charbuf inbuf, outbuf;
struct hthead *req, *resp;
off_t dlen, sent;
- size_t headoff;
+ ssize_t headoff;
char nmbuf[256];
bufinit(inbuf);
goto out;
inbuf.b[headoff] = old;
bufeat(inbuf, headoff);
- /* We strip off the leading slash from the rest string, so
- * that multiplexers can parse coherently. */
+ /* We strip off the leading slash and any param string from
+ * the rest string, so that multiplexers can parse
+ * coherently. */
if(req->rest[0] == '/')
replrest(req, req->rest + 1);
+ if((p = strchr(req->rest, '?')) != NULL)
+ *p = 0;
/*
* Add metainformation and then send the request to the root
if(dlen > 0)
passdata(fd, cfd, &inbuf, dlen);
}
+ /* Make sure to send EOF */
+ shutdown(cfd, SHUT_WR);
/*
* Find and decode the response header: