Skip to content
sws.c 28.9 KiB
Newer Older
    /* 0 is returned to the child */
    if(0 == rc) {
#endif
    logmsg("====> Client connect");
    /*
     * Disable the Nagle algorithm to make it easier to send out a large
     * response in many small segments to torture the clients more.
     */
    if (setsockopt(msgsock, IPPROTO_TCP, TCP_NODELAY,
                   (void *)&flag, sizeof(flag)) == -1) {
    /* initialization of httprequest struct is done in get_request(), but due
       to pipelining treatment the pipelining struct field must be initialized
       previously to FALSE every time a new connection arrives. */
      if(get_request(msgsock, &req))
        /* non-zero means error, break out of loop */
        break;
      if(prevbounce) {
        /* bounce treatment requested */
        if((req.testno == prevtestno) &&
           (req.partno == prevpartno)) {
          req.partno++;
          logmsg("BOUNCE part number to %ld", req.partno);
        }
Yang Tse's avatar
Yang Tse committed
        else {
          prevbounce = FALSE;
          prevtestno = -1;
          prevpartno = -1;
        }
      if((req.testno < 0) && (req.testno != DOCNUMBER_CONNECT)) {
        logmsg("special request received, no persistancy");
        break;
      }
        logmsg("instructed to close connection after server-reply");
        break;
      }
        logmsg("=> persistant connection request ended, awaits new request");
      /* if we got a CONNECT, loop and get another request as well! */
    } while(req.open || (req.testno == DOCNUMBER_CONNECT));
    logmsg("====> Client disconnect");