求兄弟们指点指点_Unix网络编程之当头一棒

网友投稿 561 2022-09-23

求兄弟们指点指点_Unix网络编程之当头一棒

求兄弟们指点指点_Unix网络编程之当头一棒

Suse下可以运行  但有两点不太明白,求兄弟们指点指点,谢谢!!!

不知道这个daemon_inetd()中这两个参数怎么使用  char *pname和int facility?

不知道用这个daemon_inetd()怎么把这个daemon_proc初始化?

#include  #include  #include  #include  #include  #include  #include   #include  #include  #include   #include  #include   #define SA      struct sockaddr  #define MAXLINE 4096  #define MAXFD   64   int     daemon_proc;    /* set nonzero by daemon_init() */  static void err_doit(int errnoflag, int level, const char *fmt, va_list ap);  void err_quit(const char *fmt, ...);  void err_sys(const char *fmt, ...);  void daemon_inetd(const char *pname, int facility);   int main(int argc, char **argv)  {      int                 sockfd, n;      char                recvline[MAXLINE + 1];      struct sockaddr_in  servaddr;       if (argc < 2)          err_quit("usage: a.out ");       if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)          err_sys("socket error");       bzero(&servaddr, sizeof(servaddr));      servaddr.sin_family = PF_INET;      servaddr.sin_port   = htons(1313);  /* daytime server */     if (inet_pton(PF_INET, argv[1], &servaddr.sin_addr) <= 0)          err_quit("inet_pton error for %s", argv[1]);       if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)          err_sys("connect error");       while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {          recvline[n] = 0;    /* null terminate */         if (fputs(recvline, stdout) == EOF)              err_sys("fputs error");      }      if (n < 0)          err_sys("read error");       exit(0);  }   /* Fatal error related to a system call.   * Print a message and terminate. */ void err_sys(const char *fmt, ...)  {      va_list     ap;       va_start(ap, fmt);      err_doit(1, LOG_ERR, fmt, ap);      va_end(ap);      exit(1);  }   /* Fatal error unrelated to a system call.   * Print a message and terminate. */ void err_quit(const char *fmt, ...)  {      va_list     ap;       va_start(ap, fmt);      err_doit(0, LOG_ERR, fmt, ap);      va_end(ap);      exit(1);  }   /* Print a message and return to caller.   * Caller specifies "errnoflag" and "level". */ static void err_doit(int errnoflag, int level, const char *fmt, va_list ap)  {      int     errno_save, n;      char    buf[MAXLINE];       errno_save = errno;     /* value caller might want printed */ #ifdef  HAVE_VSNPRINTF      vsnprintf(buf, sizeof(buf), fmt, ap);   /* this is safe */ #else      vsprintf(buf, fmt, ap);                 /* this is not safe */ #endif      n = strlen(buf);      if (errnoflag)          snprintf(buf+n, sizeof(buf)-n, ": %s", strerror(errno_save));      strcat(buf, "\n");       if (daemon_proc) {          syslog(level, buf);      } else {          fflush(stdout);     /* in case stdout and stderr are the same */         fputs(buf, stderr);          fflush(stderr);      }      return;  }   void daemon_inetd(const char *pname, int facility)  {      daemon_proc = 1;        /* for our err_XXX() functions */     openlog(pname, LOG_PID, facility);  }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Open×××可以push到客户端的setenv
下一篇:运动品牌营销新打法:打造线上健身社群 专注私域流量!(运动品牌推广方案)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~