예제 #1
0
파일: signals.c 프로젝트: spc476/x-grey
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;
  }
}
예제 #2
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;
}