2. 指令的解决方法:
oute add -net 255.255.255.255 netmask 255.255.255.255 dev eth0 metric 1
或者
route add -host 255.255.255.255 dev eth0
 
需要用到函数:setsockopt();
 
setsockopt()函数,用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。
#include <sys/types.h>
#include <sys/socket.h>
函数原型:
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
sockfd:标识一个套接口的描述字。
level:选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
optname:需设置的选项。
optval:指针,指向存放选项待设置的新值的缓冲区
optlen:optval缓冲区长度。
 
example:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<sys/types.h>
  5. #include<sys/socket.h>
  6. #include<sys/wait.h>
  7. #include<netinet/in.h>
  8. #include<arpa/inet.h>
  9. #include<errno.h>
  10. int main(){
  11. char msg[128] = "I am broadCast message from server!";
  12. int brdcFd;
  13. if((brdcFd = socket(PF_INET, SOCK_DGRAM, 0)) == -1){
  14. printf("socket fail\n");
  15. return -1;
  16. }
  17. int optval = 1;//这个值一定要设置,否则可能导致sendto()失败
  18. setsockopt(brdcFd, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &optval, sizeof(int));
  19. struct sockaddr_in theirAddr;
  20. memset(&theirAddr, 0, sizeof(struct sockaddr_in));
  21. theirAddr.sin_family = AF_INET;
  22. theirAddr.sin_addr.s_addr = inet_addr("255.255.255.255");
  23. theirAddr.sin_port = htons(4001);
  24. int sendBytes;
  25. if((sendBytes = sendto(brdcFd, msg, strlen(msg), 0,
  26. (struct sockaddr *)&theirAddr, sizeof(struct sockaddr))) == -1){
  27. printf("sendto fail, errno=%d\n", errno);
  28. return -1;
  29. }
  30. printf("msg=%s, msgLen=%d, sendBytes=%d\n", msg, strlen(msg), sendBytes);
  31. close(brdcFd);
  32. return 0;
  33. }
 
SOL_SOCKET注解:
第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。 option_name指定准备设置的选项,option_name可以有哪些取值,这取决于level,以Linux 2.6内核为例(在不同的平台上,这种关系可能会有不同),在套接字级别上(SOL_SOCKET),option_name可以有以下取 值:
 
  1. SO_DEBUG,打开或关闭调试信息。
 
    当option_value不等于0时,打开调试信息,否则,关闭调试信息。它实际所做的工作是在sock->sk->sk_flag中置 SOCK_DBG(第10)位,或清SOCK_DBG位。
  1. SO_REUSEADDR,打开或关闭地址复用功能。
 
    当option_value不等于0时,打开,否则,关闭。它实际所做的工作是置sock->sk->sk_reuse为1或0。
  1. SO_DONTROUTE,打开或关闭路由查找功能。
 
    当option_value不等于0时,打开,否则,关闭。它实际所做的工作是在sock->sk->sk_flag中置或清 SOCK_LOCALROUTE位。
  1. SO_BROADCAST,允许或禁止发送广播数据。
 
    当option_value不等于0时,允许,否则,禁止。它实际所做的工作是在sock->sk->sk_flag中置或清 SOCK_BROADCAST位。
  1. SO_SNDBUF,设置发送缓冲区的大小。
 
    发送缓冲区的大小是有上下限的,其上限为256 * (sizeof(struct sk_buff) + 256),下限为2048字节。该操作将sock->sk->sk_sndbuf设置为val * 2,之所以要乘以2,是防
大数据量的发送,突然导致缓冲区溢出。最后,该操作完成后,因为对发送缓冲的大小 作了改变,要检查sleep队列,如果有进程正在等待写,将它们唤醒。
  1. SO_RCVBUF,设置接收缓冲区的大小。
 
    接收缓冲区大小的上下限分别是:256 * (sizeof(struct sk_buff) + 256)和256字节。该操作将sock->sk->sk_rcvbuf设置为val * 2。
  1. SO_KEEPALIVE,套接字保活。
 
    如果协议是TCP,并且当前的套接字状态不是侦听(listen)或关闭(close),那么,当option_value不是零时,启用TCP保活定时 器,否则关闭保活定时器。对于所有协议,该操
作都会根据option_value置或清 sock->sk->sk_flag中的 SOCK_KEEPOPEN位。
  1. SO_OOBINLINE,紧急数据放入普通数据流。
 
    该操作根据option_value的值置或清sock->sk->sk_flag中的SOCK_URGINLINE位。
  1. SO_NO_CHECK,打开或关闭校验和。
 
    该操作根据option_value的值,设置sock->sk->sk_no_check。
  1. SO_PRIORITY,设置在套接字发送的所有包的协议定义优先权。Linux通过这一值来排列网络队列。
 
    这个值在0到6之间(包括0和6),由option_value指定。赋给sock->sk->sk_priority。
  1. SO_LINGER,如果选择此选项, close或 shutdown将等到所有套接字里排队的消息成功发送或到达延迟时间后>才会返回. 否则, 调用将立即返回。
 
    该选项的参数(option_value)是一个linger结构:
        struct linger {
            int   l_onoff;    /* 延时状态(打开/关闭) */
            int   l_linger;   /* 延时多长时间 */
        };
如果linger.l_onoff值为0(关闭),则清 sock->sk->sk_flag中的SOCK_LINGER位;否则,置该位,并赋sk->sk_lingertime值为 linger.l_linger。
  1. SO_PASSCRED,允许或禁止SCM_CREDENTIALS 控制消息的接收。
 
    该选项根据option_value的值,清或置sock->sk->sk_flag中的SOCK_PASSCRED位。
  1. SO_TIMESTAMP,打开或关闭数据报中的时间戳接收。
 
    该选项根据option_value的值,清或置sock->sk->sk_flag中的SOCK_RCVTSTAMP位,如果打开,则还需 设sock->sk->sk_flag中的SOCK_TIMESTAMP位,同时,将全局变量
netstamp_needed加1。
  1. SO_RCVLOWAT,设置接收数据前的缓冲区内的最小字节数。
 
    在Linux中,缓冲区内的最小字节数是固定的,为1。即将sock->sk->sk_rcvlowat固定赋值为1。
  1. SO_RCVTIMEO,设置接收超时时间。
 
    该选项最终将接收超时时间赋给sock->sk->sk_rcvtimeo。
  1. SO_SNDTIMEO,设置发送超时时间。
 
    该选项最终将发送超时时间赋给sock->sk->sk_sndtimeo。
  1. SO_BINDTODEVICE,将套接字绑定到一个特定的设备上。
 
    该选项最终将设备赋给sock->sk->sk_bound_dev_if。
  1. SO_ATTACH_FILTER和SO_DETACH_FILTER。

linux中C语言发送广播报文的更多相关文章

  1. 一篇详细的linux中shell语言的字符串处理

    1 cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要 ...

  2. Linux中Postfix邮件发送配置(三)

    部署DNS服务器 postfix根据域名和地址做一个MX记录,A记录,PTR记录(一般在互联网上邮件服务器都要反解,没有PTR记录会认为是垃圾邮件) $ service iptables stop $ ...

  3. Linux中C语言的编程

    编译的过程 编译的概念:编译程序读取源程序(字符流),对之进行词法与语法的分析,将高级语言指令转换成功能等效的汇编代码,再由汇编程序转换成机器语言,并且按照操作系统对可执行文件格式的要求链接成可执行程 ...

  4. linux 中C语言便于调试的宏定义编写及 __FILE__,__FUNCTION__, __LINE__参数使用

    转自:http://blog.csdn.net/edonlii/article/details/8491342/ 在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难.因此在程序中加 ...

  5. linux中c语言编程main函数和参数

    linux下main函数的的标准调用函数的标准形式 int main(int char,char *argv[]) 在main函数的两个参数中,argc必须是整型变量,其是命令行的参数的数目,argv ...

  6. Linux中的邮件发送

    这里写出两种常用的邮件发送方式: mail: 需要安装sendmail和postfix两个服务 编辑/etc/mail.rc,在最后添加 set from=scottcho@126.com smtp= ...

  7. linux中C语言的运行(gcc)

    执行sudo apt-get install build-essential 出现

  8. linux中C的静态库和动态库分析

    从开始学C语言写第一个"hello world"历程到现在,我依然困惑于到底这个程序完整的执行流程是什么样的.不过,现在我正在尝试一点一点的揭开它的面纱.现在,我尝试分析linux ...

  9. Linux中处理需要传输的IP报文流程

    本文主要讲解了Linux中处理需要传输的IP报文流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linux中处理需要传输的IP报文流程进行了讲解,希望可以对 ...

随机推荐

  1. [解决]WPF 在 win7 系统无法运行:FileNotFoundException

    开发环境:VS2015 + .NET 4.6.2 开发项目1:WPF + CefSharp 开发项目2:WPF 情况:两个项目编译的程序都无法在客户环境的 win7上运行,事件查看器中如下日志: Th ...

  2. LeetCode-206.ReverseLinked List

    Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...

  3. 前端 HTML文档 详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. QQ公众号?是的,你没看错!

    微信公众平台培育了800多万的微信公众号,自身也通过微信游戏.广告分销等找到了一些增值盈利模式.作为同门大师兄,qq也在11月份推出了QQ公众号,第一个手机QQ上的“生活服务号”——YTO圆通速递上线 ...

  5. 如何控制dedecms描述的长度?

    我们都知道调用dedecms的标题长度可以用titlelen='字符数',{dede:arclist titlelen='10'},表示标题长度为10个字符,也即是5个汉字.如果想要控制描述的调用长度 ...

  6. 1.如何修改oracle的密码

    在下图中的目录下面找到 PWDorcl.ora 文件,orcl是数据库的实例名  备份,将PWDorcl.ora 文件名称改为 PWDorcl_back.ora 以管理员身份打开cmd,执行 orap ...

  7. (转)Kangle配置文件

    kangle配置文件 (重定向自Kangle配置文件) 目录 [隐藏] 1配置文件介绍 2重新加载配置文件 3config 3.1request和response(配置访问控制) 3.2listen( ...

  8. [py]你真的了解多核处理器吗? 了解多线程

    越来越多的人搞爬虫,设计到多线程爬取, 还有一些机器学习的一些模块也需要这玩意, 感觉自己不会逼格不高. 抽时间赶紧玩一玩这东西, 希望提高对软件的认知和归属感,不要太傻. cpu内部架构参考 你知道 ...

  9. 网站被XMR恶意挖矿

    发现: 网站首页被恶意更改 网站的关键词和描述被恶意更改 服务器和只要访问此服务器上的网页cup 直线上升100% 排查代码发现js 文件被恶意更改,访问了挖矿网站 操作:删除js 里面的恶意代码,更 ...

  10. 分布式文件系统ceph快速部署

    架构图 配置ceph-deploy节点 管理节点配置ceph yum源 vim /etc/yum.repos.d/ceph.repo [ceph-noarch] name=Ceph noarch pa ...