⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 talkd.c

📁 压缩包中包含LINUX下多个命令的源码
💻 C
字号:
/* Copyright (C) 1998,2001, 2002 Free Software Foundation, Inc.   This file is part of GNU Inetutils.   GNU Inetutils is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.   GNU Inetutils is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with GNU Inetutils; see the file COPYING.  If not, write to   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA. */#include <intalkd.h>#include <signal.h>#include <getopt.h>#ifndef LOG_FACILITY# define LOG_FACILITY LOG_DAEMON#endifstatic void show_usage (void);static void show_version (void);static void show_license (void);void talkd_init (void);void talkd_run (int fd);static char short_options[] = "VLha:di:r:t:";static struct option long_options[] ={  /* Help options */  {"version", no_argument, NULL, 'V'},  {"license", no_argument, NULL, 'L'},  {"help", no_argument, NULL, 'h'},  {"acl", required_argument, NULL, 'a'},  {"debug", no_argument, NULL, 'd'},  {"idle-timeout", required_argument, NULL, 'i'},  {"timeout", required_argument, NULL, 't'},  {"request-ttl", required_argument, NULL, 'r'},  {NULL, no_argument, NULL, 0}};/* Configurable parameters: */int debug;unsigned int timeout = 30;time_t max_idle_time = 120;time_t max_request_ttl = MAX_LIFE;char *hostname;intmain(int argc, char *argv[]){  int c;  char *acl_file = NULL;  while ((c = getopt_long (argc, argv, short_options, long_options, NULL))	 != EOF)    {      switch (c)	{	case 'V':	  show_version ();	  exit (0);	  break;	case 'L':	  show_license ();	  exit (0);	case 'h':	  show_usage ();	  exit (0);	  break;	case 'a':	  acl_file = optarg;	  break;	case 'd':	  debug++;	  break;	case 't':	  timeout = strtoul (optarg, NULL, 0);	  break;	case 'i':	  max_idle_time = strtoul (optarg, NULL, 0);	  break;	case 'r':	  max_request_ttl = strtoul (optarg, NULL, 0);	  break;	default:	  fprintf (stderr, "talkd: %c: not implemented\n", c);	  exit (1);	}    }  read_acl (acl_file);  talkd_init ();  talkd_run (0);  return 0;}voidtalkd_init (){  extern char * localhost(void);  openlog ("talkd", LOG_PID, LOG_FACILITY);  hostname = localhost ();  if (!hostname)    {      syslog (LOG_ERR, "can't determine my hostname: %m");      exit (1);    }}time_t last_msg_time;static voidalarm_handler (int err){  (void)err;  if ((time (NULL) - last_msg_time) >= max_idle_time)    exit(0);  alarm (timeout);}voidtalkd_run (int fd){  signal (SIGALRM, alarm_handler);  alarm (timeout);  while (1)    {      int rc;      struct sockaddr_in sa_in;      CTL_MSG msg;      CTL_RESPONSE resp;      int len;      len = sizeof sa_in;      rc = recvfrom (fd, &msg, sizeof msg, 0, (struct sockaddr *)&sa_in, &len);      if (rc != sizeof msg)	{	  if (rc < 0 && errno != EINTR)	    syslog (LOG_WARNING, "recvfrom: %m");	  continue;	}      last_msg_time = time (NULL);      if (process_request (&msg, &sa_in, &resp) == 0)	{	  rc = sendto(fd, &resp, sizeof resp, 0,		      (struct sockaddr *)&msg.ctl_addr, sizeof (msg.ctl_addr));	  if (rc != sizeof resp)	    syslog (LOG_WARNING, "sendto: %m");	}    }}voidshow_version (){  printf ("talkd - %s %s\n", PACKAGE_NAME, PACKAGE_VERSION);  printf ("Copyright (C) 2001 Free Software Foundation, Inc.\n");  printf ("%s comes with ABSOLUTELY NO WARRANTY.\n", PACKAGE_NAME);  printf ("You may redistribute copies of %s\n", PACKAGE_NAME);  printf ("under the terms of the GNU General Public License.\n");  printf ("For more information about these matters, ");  printf ("see the files named COPYING.\n");}voidshow_license (void){  static char license_text[] ="   This program is free software; you can redistribute it and/or modify\n""   it under the terms of the GNU General Public License as published by\n""   the Free Software Foundation; either version 2, or (at your option)\n""   any later version.\n""\n""   This program is distributed in the hope that it will be useful,\n""   but WITHOUT ANY WARRANTY; without even the implied warranty of\n""   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n""   GNU General Public License for more details.\n""\n""   You should have received a copy of the GNU General Public License\n""   along with this program; if not, write to the Free Software\n""   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n";  printf ("%s", license_text);}voidshow_usage (void){  printf ("\Usage: talkd [OPTION]...\n\\n\Options are:\n\  -a, --acl FILE         read site-wide ACLs from FILE\n\  -d, --debug            enable debugging\n\  -i, --idle-timeout SECONDS  set idle timeout value\n\  -r, --request-ttl SECONDS   set request time-to-live value\n\  -t, --timeout SECONDS       set timeout value\n\Informational options:\n\  -h, --help             display this help and exit\n\  -L, --license          display license and exit\n\  -V, --version          output version information and exit\n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -