博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux IPC socket 广播,组播
阅读量:6481 次
发布时间:2019-06-23

本文共 1189 字,大约阅读时间需要 3 分钟。

getsockopt()/setsockopt()

//获得sockfd指向的socket的属性int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);//设置sockfd指向的socket的属性,成功返回0,失败返回-1设errno。int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

level :选项级别

  • SOL_SOCKET:指定设置属性在socket API层次,即通用socket选项
  • IPPROTO_IP:IP选项。
  • IPPROTO_TCP:TIP选项。

optname:选项名

  • SO_BROADCAST:广播

optval:存放选项值的缓冲区地址

optlen:缓冲区长度

广播

广播即向当前网段的所有主机进行广播。广播的信息是在接受方的传输层才决定是否被处理,广播主机的使用当前网段的最大ip地址作为广播地址,即,xxx.xxx.xxx.255,而255.255.255.255在所有网段都是广播地址。 只有使用udp套接字才能广播,而默认设置的socket是不允许发送广播的,需要setsockopt()进行设置

模型

sockfd=soket();...int on = 1;setsockopt(sockfd,SOL_SOCKKET,SO_BROADCAST,&on,sizeof(on));...sendto();

组播

广播在接收主机的传输层才会决定是否处理,如果很多主机都是不处理,这种广播风暴无疑会大大的占用带宽并增加主机负载。组播就可以解决既希望实现"一发多收"又不希望引起"广播风暴"的一种机制。组播就是只发消息给组内的主机,而不是网段内所有的主机。

模型

//netinet/in.hstruct ip_mreq{    struct in_addr imr_multiaddr;    struct in_addr imr_interface;};// 加入多播组struct ip_mreq mreq;bzero(&mreq,sizeof(mreq));mreq.imr_multiaddr.s_addr=inet_addr("224.1.2.2");mreq.imr_interface.s_addr=htonl(INADDR_ANY);    setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));

转载于:https://www.cnblogs.com/xiaojiang1025/p/6032497.html

你可能感兴趣的文章
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
当我们谈性能的时候,我们实际上在谈什么?
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>
MongoDB的基础使用
查看>>
进程间通信——命名管道
查看>>
ssh登陆不需要密码
查看>>
java mkdir()和mkdirs()区别
查看>>