Changeset 32712


Ignore:
Timestamp:
Jul 16, 2017, 3:54:13 PM (4 days ago)
Author:
brainslayer
Message:

must use direct read, otherwise the fread implementation of musl will delay the read process since it tries to fill up the buffer by itself

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/router/httpd/httpd.c

    r32711 r32712  
    596596        for (;;) {
    597597
    598                 int r = wfread(buf, LINE_LEN - lastread, 1, conn_fp);
     598                int r = wfread(buf, 1, LINE_LEN - lastread, conn_fp);
    599599                if (r < 0 && (errno == EINTR || errno == EAGAIN))
    600600                        continue;
     
    611611        if (!strlen(line) || !finished) {
    612612                send_error(conn_fp, 408, "Request Timeout", NULL, "No request appeared within a reasonable time period.");
     613
    613614                goto out;
    614615        }
     
    648649                        cp += strspn(cp, " \t");
    649650                        authorization = cp;
    650                         cur = cp + strlen(cp) + 1;
     651                        for (cp = cur; *cp && *cp != '\n'; cp++) ;
     652                        *cp = '\0';
     653                        cur = ++cp;
     654
    651655                } else if (strncasecmp(cur, "Referer:", 8) == 0) {
    652656                        cp = &cur[8];
    653657                        cp += strspn(cp, " \t");
    654658                        referer = cp;
    655                         cur = cp + strlen(cp) + 1;
     659                        for (cp = cur; *cp && *cp != '\n'; cp++) ;
     660                        *cp = '\0';
     661                        cur = ++cp;
     662
    656663                } else if (strncasecmp(cur, "Host:", 5) == 0) {
    657664                        cp = &cur[5];
    658665                        cp += strspn(cp, " \t");
    659666                        host = cp;
    660                         cur = cp + strlen(cp) + 1;
     667                        for (cp = cur; *cp && *cp != '\n'; cp++) ;
     668                        *cp = '\0';
     669                        cur = ++cp;
     670
    661671                } else if (strncasecmp(cur, "Content-Length:", 15) == 0) {
    662672                        cp = &cur[15];
    663673                        cp += strspn(cp, " \t");
    664674                        cl = strtoul(cp, NULL, 0);
     675                        for (cp = cur; *cp && *cp != '\n'; cp++) ;
     676                        *cp = '\0';
     677                        cur = ++cp;
    665678
    666679                } else if ((cp = strstr(cur, "boundary="))) {
     
    673686                        cp += strspn(cp, " \t");
    674687                        useragent = cp;
    675                         cur = cp + strlen(cp) + 1;
     688
     689                        for (cp = cur; *cp && *cp != '\n'; cp++) ;
     690                        *cp = '\0';
     691                        cur = ++cp;
     692
    676693                } else if (strncasecmp(cur, "Accept-Language:", 16) == 0) {
    677694                        cp = &cur[17];
    678695                        cp += strspn(cp, " \t");
    679696                        language = cp;
    680                         cur = cp + strlen(cp) + 1;
     697                        for (cp = cur; *cp && *cp != '\n'; cp++) ;
     698                        *cp = '\0';
     699                        cur = ++cp;
    681700                } else {
    682701                        // skip line                   
     
    15261545                 */
    15271546                r = 1;
    1528                 (void)setsockopt(conn_fp->conn_fd, IPPROTO_TCP, TCP_NOPUSH, (void *)&r, sizeof(r));
     1547//              (void)setsockopt(conn_fp->conn_fd, IPPROTO_TCP, TCP_NOPUSH, (void *)&r, sizeof(r));
    15291548#endif                          /* TCP_NOPUSH */
    15301549
     
    17721791#elif defined(HAVE_POLARSSL)
    17731792                int len = n * size;
    1774                 fprintf(stderr, "read ssl %d\n", len);
     1793                A fprintf(stderr, "read ssl %d\n", len);
    17751794                ret = ssl_read((ssl_context *) fp, (unsigned char *)buf, &len);
    17761795#endif
    17771796        } else
    17781797#endif
    1779                 ret = fread(buf, size, n, fp);
     1798                ret = read(wp->conn_fd, buf, size * n);
    17801799        return ret;
    17811800}
Note: See TracChangeset for help on using the changeset viewer.