第20章 广播

1·广播和多播要求用于UDP或原始IP,它们不能用于TCP。

2·单播IP数据报仅由通过目的IP地址指定的单个主机接收。

3·广播分组去往子网上的所以主机,包括发送主机本身。

4·(一般)除非显式告诉内核我们准备发送广播数据报,否则系统不允许我们这么做。

    const int on = 1;

    setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));

5·解决竞争状态:

    a.使用pselect(阻塞信号)

    b.使用sigsetjmp和siglongjmp(避免使用)

    c.使用从信号处理函数到主循环的IPC(管道等)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

原始UDP封包发送

发送原始UDP封包时: 1 以IPPROTO_UDP 为协议类型创建一个原始套接字,打开原始套接字上的IP_HDRINCL选项 2 构建UDP封包,要先设置IP...

1906
来自专栏Golang语言社区

Linux下socket双向通信

linux下的socket与windows下的类似,就是少一个初始化的过程。 服务端 客户端 1 创建socke...

3688
来自专栏解Bug之路

TCP协议详解-定时器

        如代码所示,如果tcp的state<ESTABLISHED,表明其处于连接建立状态。定时器超时后,调用dropit终止连接。大多数伯克利系统将建...

602
来自专栏用户2442861的专栏

recv函数说明返回值

客户端的程序连接上服务器后recv函数阻塞接受,有时会返回0,说明接收超时服务器主动断开了连接,需要重新connect服务器,但重新connect时会报“Tr...

491
来自专栏Golang语言社区

socket编程小问题:地址已经被使用——Address already in use

很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个...

3334
来自专栏xingoo, 一个梦想做发明家的程序员

广播通信

广播:可以把数据发送给本地子网上的每个机器。 如果多个进程都发送广播数据,网络就会阻塞 对于UDP来说,存在一个特定的广播地址,255.255.255.255 ...

1985
来自专栏架构之路

【网络编程系列】二:socket通信原理及实践

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或...

4636
来自专栏python3

python3--socket编程(udp协议)

udp是无连接的,启动服务之后可以直接接受消息,不需要提前建立连接,UDP必须是server端先接受消息

752
来自专栏Python

将socket通信变成并发的方式

一 利用multiprocessing模块,开启多进程,实现socket通信并发 1. 开启子进程的两种方式 import time import random...

2838
来自专栏禁心尽力

关于网络编程

说起网络编程,通俗的说就是Socket编程。 使用对象InetAddress,因为该对象无构造函数,故不用new对象即可使用。 获取一个已知主机名的IP地址和主...

19410

扫码关注云+社区