Clamav杀毒软件源码分析笔记 十

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               
Clamav杀毒软件源码分析笔记[十]


刺猬@http://blog.csdn.net/littlehedgehog





[客户端处理]


服务端已经把主要的工作都已经处理的差不多了,剩下来也就是服务端等待客户端提出请求,然后根据客户端的请求做相应的工作. 所以客户端所做的事情就只是提交数据,然后坐享其成.服务端是在垂帘听政呢,还是做幕后英雄?话不多说了,下面进入正题.


客户端(clamdscan)的主函数main和clamscan其实用的是同一个main,当然里面的内容同样还是处理命令行,配置文件等相关信息,乏善可陈,经过这系列处理之后,我们来到了client这个客户端的逻辑处理主函数.但是我还是不准备详细来说这个函数,因为它除了因为客户端只是创建socket和使用connect对服务端进行连接而不需要啥绑定,监听,实在和服务端的创建没多少代码上的区别. 只是在连接的时候,我们要分配置文件里是设定的本地连接还是网络连接. 如下所示:


  1. /* 创建套间字 并建立链接*/
  2. int dconnect(const struct optstruct *opt)
  3. {
  4.     struct sockaddr_un server;                              //这里定义了两个地址,注意一个为AF_UNIX,而另一个为AF_INET
  5.     struct sockaddr_in server2;
  6.     struct hostent *he;
  7.     struct cfgstruct *copt, *cpt;
  8.     const char *clamav_conf = getargl(opt, "config-file");  //从config-file中获取配置文件名
  9.     int sockd;


  10.     if (!clamav_conf)
  11.         clamav_conf = DEFAULT_CFG;

  12.     if ((copt = parsecfg(clamav_conf, 1)) == NULL)
  13.     {
  14.         mprintf("@Can't parse the configuration file./n");
  15.         return -1;
  16.     }

  17.     memset((char *) &server, 0, sizeof(server));
  18.     memset((char *) &server2, 0, sizeof(server2));

  19.     /* Set default address to connect to 这里默认是设置为本地地址*/
  20.     server2.sin_addr.s_addr = inet_addr("127.0.0.1");

  21.     if (cfgopt(copt, "TCPSocket") && cfgopt(copt, "LocalSocket"))   //TCPSocket 和   LocalSocket 只能配置一个
  22.     {
  23.         mprintf("@Clamd is not configured properly./n");
  24.         return -1;
  25.     }
  26.     else if ((cpt = cfgopt(copt, "LocalSocket")))       //本地socket,也就是用AF_UNIX地址域啦
  27.     {

  28.         server.sun_family = AF_UNIX;
  29.         strncpy(server.sun_path, cpt->strarg, sizeof(server.sun_path));

  30.         if ((sockd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
  31.         {
  32.             perror("socket()");
  33.             mprintf("@Can't create the socket./n");
  34.             return -1;
  35.         }

  36.         if (connect(sockd, (struct sockaddr *) &server, sizeof(struct sockaddr_un)) < 0)
  37.         {
  38.             close(sockd);
  39.             perror("connect()");
  40.             mprintf("@Can't connect to clamd./n"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值