Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1844466
  • 博文数量: 274
  • 博客积分: 2366
  • 博客等级: 大尉
  • 技术积分: 1880
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 09:37
文章分类

全部博文(274)

文章存档

2022年(1)

2020年(10)

2019年(7)

2018年(18)

2017年(26)

2016年(32)

2015年(43)

2014年(30)

2013年(44)

2012年(36)

2011年(17)

2010年(10)

分类: LINUX

2013-09-10 15:52:01


点击(此处)折叠或打开

  1. int broadcastsendmsg(int fd, int port, const char* buf)
  2. {
  3.     struct sockaddr_in remote;
  4.     ssize_t ret;
  5.     struct ifaddrs * ifAddr = NULL;
  6.     struct sockaddr_in* saddr = NULL;


  7.     remote.sin_family = AF_INET;
  8.     remote.sin_addr.s_addr = htonl(INADDR_BROADCAST);
  9.     remote.sin_port = htons(port);
  10.     memset(&(remote.sin_zero), 0, 8);


  11.     getifaddrs(&ifAddr);
  12.     while (ifAddr != NULL)
  13.     {
  14.         /* ignore lo and ipv6 */
  15.         if(strcmp(ifAddr->ifa_name, "lo") && ifAddr->ifa_addr->sa_family == AF_INET)
  16.         {
  17.             unsigned int addr = 0;
  18.             unsigned int mask = 0;


  19.             saddr = (struct sockaddr_in *)ifAddr->ifa_addr;
  20.             addr = saddr->sin_addr.s_addr;
  21.             saddr = (struct sockaddr_in *)ifAddr->ifa_netmask;
  22.             mask = saddr->sin_addr.s_addr;


  23.             if(0)
  24.             {
  25.                 struct in_addr sin_addr;
  26.                 sin_addr.s_addr = addr & mask;
  27.                 char addressBuffer[INET_ADDRSTRLEN];
  28.                 inet_ntop(AF_INET, (void*)&sin_addr, addressBuffer, INET_ADDRSTRLEN);


  29.                 printf("net addr :%s\n", addressBuffer);
  30.             }


  31.             remote.sin_addr.s_addr = addr & mask;
  32.             ret = sendto(fd, buf, strlen(buf) , 0, (struct sockaddr*)&remote, sizeof(remote));
  33.             if(ret == -1)
  34.             {
  35.                 perr("sendto");
  36.                 loge("broadcastsendmsg fail\n");
  37.                 return -1;
  38.             }


  39.             if((size_t )ret != strlen(buf))
  40.             {
  41.                 loge("sendto send data not complete, err\n");
  42.                 return -2;
  43.             }
  44.         }


  45.         ifAddr = ifAddr->ifa_next;
  46.     }


  47.     return 1;
  48. }


阅读(1603) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~