Changeset 1612


Ignore:
Timestamp:
02/18/10 22:21:23 (11 years ago)
Author:
alno
Message:

WebIf:

  • changed http exit (THX @ _network)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/monitor-improvement/oscam-http.c

    r1611 r1612  
    16421642
    16431643void http_srv() {
    1644     int i,sock, reuse =1;
     1644    int i,sock, reuse = 1;
    16451645    struct sockaddr_in sin;
    16461646    struct sockaddr_in remote;
     
    16491649
    16501650    /* Prepare lookup array for conversion between ascii and hex */
    1651     tmp = malloc(3*sizeof(char));
    1652     for(i=0; i<256; i++) {
     1651    tmp = malloc(3 * sizeof(char));
     1652    for(i = 0; i < 256; i++) {
    16531653        snprintf(tmp, 3,"%02x", i);
    16541654        memcpy(hex2ascii[i], tmp, 2);
     
    16601660
    16611661    /* Startup server */
    1662     if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
     1662    if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
    16631663        cs_log("HTTP Server: Creating socket failed! (errno=%d)", errno);
    16641664        return;
    16651665    }
    1666     if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){
     1666    if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) {
    16671667        cs_log("HTTP Server: Setting SO_REUSEADDR via setsockopt failed! (errno=%d)", errno);
    16681668    }
     
    16771677        return;
    16781678    }
    1679     if (listen(sock, SOMAXCONN) < 0){
     1679    if (listen(sock, SOMAXCONN) < 0) {
    16801680        cs_log("HTTP Server: Call to listen() failed! (errno=%d)", errno);
    16811681        close(sock);
     
    16831683    }
    16841684    cs_log("HTTP Server listening on port %d", cfg->http_port);
    1685     while (running)
    1686     {
     1685    struct pollfd pfd[1];
     1686    int rc;
     1687    pfd[0].fd = sock;
     1688    pfd[0].events = (POLLIN | POLLPRI);
     1689
     1690    while (running) {
    16871691        int s;
    16881692        FILE *f;
    1689         if((s = accept(sock, (struct sockaddr *) &remote, &len)) < 0){
    1690             cs_log("HTTP Server: Error calling accept() (errno=%d).", errno);
    1691             break;
    1692         }
    1693 
    1694         f = fdopen(s, "r+");
    1695         process_request(f, remote.sin_addr);
    1696         fflush(f);
    1697         fclose(f);
    1698         shutdown(s, SHUT_WR);
    1699         close(s);
    1700   }
    1701   close(sock);
    1702   kill(client[0].pid, SIGQUIT);
    1703 }
     1693
     1694        rc = poll(pfd, 1, 1000);
     1695        if (master_pid != getppid())
     1696            cs_exit(0);
     1697
     1698        if (rc > 0) {
     1699            if((s = accept(sock, (struct sockaddr *) &remote, &len)) < 0){
     1700                cs_log("HTTP Server: Error calling accept() (errno=%d).", errno);
     1701                break;
     1702            }
     1703
     1704            f = fdopen(s, "r+");
     1705            process_request(f, remote.sin_addr);
     1706            fflush(f);
     1707            fclose(f);
     1708            shutdown(s, SHUT_WR);
     1709            close(s);
     1710        }
     1711    }
     1712
     1713    close(sock);
     1714    kill(client[0].pid, SIGQUIT);
     1715}
Note: See TracChangeset for help on using the changeset viewer.