Exemplo n.º 1
0
int main(int argc, char **argv){
	int acc_sock, dump_sock;
	struct sockaddr_un ser_addr, cli_addr;

	if((acc_sock = socket(AF_LOCAL, SOCK_STREAM, 0)) < 0)
		err_sys("socket func fail");
	
	printf("acc_sock:%d\n",acc_sock);
	ser_addr.sun_family = AF_LOCAL;
	strcpy(ser_addr.sun_path, UNIX_SERV_PATH);
	printf("path:%s\n", ser_addr.sun_path);
	unlink(UNIX_SERV_PATH);/*unlink for the next usage*/
	
	if(bind(acc_sock, (struct sockaddr*)&ser_addr, sizeof(ser_addr)) < 0)
		err_sys("bind %s error", UNIX_SERV_PATH);
	if(listen(acc_sock, 5) < 0)
		err_sys("listen error");
	signal(SIGCHLD, sig_son);
	signal(SIGINT, sig_intr);
	while(1){
		int len = sizeof(cli_addr);
		if((dump_sock = accept(acc_sock, (struct sockaddr*)&cli_addr, (socklen_t *)&len)) < 0){
			err_sys("accept error");
		}
		if(fork() == 0){/*child*/
			close(acc_sock);
			client_dump(dump_sock);
			close(dump_sock);
			exit(0);
		}
		close(dump_sock);
	}
	close(acc_sock);
	return 0;
}
Exemplo n.º 2
0
/* dump clients */
static void m_dump_client(char *arg)
{
  struct client *cptr = NULL;

  if(arg)
  {
    if(chars_isdigit(*arg))
      cptr = client_find_id(atoi(arg));
    else
      cptr = client_find_name(arg);
  }

  client_dump(cptr);
}