void check_signals(void) { if (mf_sigchld) handle_sigchld(); if (mf_sigalrm) handle_sigalrm(); if (mf_sigint) handle_sigint(); if (mf_sigquit) handle_sigquit(); if (mf_sigterm) handle_sigterm(); if (mf_sigpipe) handle_sigpipe(); if (mf_sigusr1) handle_sigusr1(); if (mf_sigusr2) handle_sigusr2(); if (mf_sighup) handle_sighup(); if (mf_stupid) { syslog(LOG_ERR,"set a signal handler,but forgot to write code to handle it"); mf_stupid = 0; } }
int tcp_server(const char *host, uint16_t port) { //处理PIPE信号 handle_sigpipe(); int listenfd = socket(AF_INET, SOCK_STREAM, 0); if (listenfd == -1) ERR_EXIT("socket"); set_reuseaddr(listenfd, 1); set_reuseport(listenfd, 1); set_keepalive(listenfd, 0); set_tcpnodelay(listenfd, 0); SAI addr; memset(&addr, 0, sizeof addr); addr.sin_family = AF_INET; addr.sin_port = htons(port); if (host == NULL) { addr.sin_addr.s_addr = INADDR_ANY; } else if (inet_aton(host, &addr.sin_addr) == 0) { struct hostent *hp = gethostbyname(host); if (hp == NULL) ERR_EXIT("gethostbyname"); addr.sin_addr = *(struct in_addr *)hp->h_addr; } if (bind(listenfd, (SA *)&addr, sizeof addr) == -1) ERR_EXIT("bind"); if (listen(listenfd, SOMAXCONN) == -1) ERR_EXIT("listen"); return listenfd; }