All pastes #748 Raw Edit

signal c

public c v1 · immutable
#748 ·published 2004-08-25 20:17 UTC
rendered paste body
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <signal.h>#include <errno.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>volatile int alive = 1;void sigterm(int s) {    printf("Sigterm received...\n");    alive = 0;    return;}void sigint(int s) {    printf("Sigint received...\n");    alive = 0;    return;}int main(int argc, char **argv) {    struct sigaction sig;    struct sockaddr_in sa;    int sfd, tmp;    memset(&sig, 0, sizeof(sig));    sig.sa_handler = sigterm;    sigaction(SIGTERM, &sig, NULL);    sig.sa_handler = sigint;    sigaction(SIGINT, &sig, NULL);    memset(&sa, 0, sizeof(sa));    sa.sin_family = AF_INET;    sfd = socket(AF_INET, SOCK_STREAM, 0);    bind(sfd, (struct sockaddr *)&sa, sizeof(sa));    listen(sfd, 20);    tmp = sizeof(sa);    getsockname(sfd, (struct sockaddr *)&sa, &tmp);    printf("Bound to: %d\n", ntohs(sa.sin_port));    while(alive) {        int cfd, socklen;        struct sockaddr_in csa;        printf("Alive...\n");        socklen = sizeof(csa);        cfd = accept(sfd, (struct sockaddr *)&csa, &socklen);        printf("Accept received: %d\n", cfd);        if(cfd < 0) {            printf("Error return: %d with errno %d (%s)\n", cfd, errno, strerror(errno));        }        write(cfd, "Goodbye.\r\n", strlen("Goodbye.\r\n"));        shutdown(cfd, 2);        close(cfd);    }    printf("Done, alive cleared.\n");    close(sfd);    exit(1);}