套接字选项、广播和组播

1. 套接字选项(socket options)

每一个套接字(socket)在不同的协议层次(级别)上面有不同的行为属性(选项)

我们可以设置 / 获取指定的套接字选项

getsockopt:获取套接字的选项
setsockopt:设置套接字的选项

cpp 复制代码
NAME
    getsockopt, setsockopt - get and set options on sockets
SYNOPSIS
    #include <sys/types.h>
    #include <sys/socket.h>

int getsockopt(int sockfd, int level, int optname,
                              void *optval, socklen_t *optlen);

int setsockopt(int sockfd, int level, int optname,
                              const void *optval, socklen_t optlen);
	
sockfd:你要设置或者获取属性的套接字描述符
		
level:你要设置或者获取属性位于什么级别
		
optname:选项名称
		
optval:指针,指向一块空间
		    get:指向的空间用来保存获取到的值
			set:指向的空间用来保存需要设置的值,把指定的值设置到socket上面去
		
optlen:
	get:指针,调用前用来保存optval指向的空间的长度,调用后保存的是获取到的选项的实
         际大小(防止内存越界)
			
    set:变量,用来指定设定选项的选项值的长度
			
返回值:	
	成功返回0,
	失败返回-1,同时errno被设置

获取指定的套接字的接收缓冲区大小,并重新设置该套接字的接收缓冲区大小

cpp 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>

int main() {
    // 申请一个套接字
	int sockfd = socket(AF_INET, SOCK_STREAM, 0);	
	if (sockfd == -1) {
		perror("socket error");
		return -1;
	}

	int buflen;
	socklen_t len = sizeof(buflen);
	// 获取接收缓冲区大小
	int r = getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (void *)&buflen, &len);
	if (r == 0) {
		printf("buflen = %d\n", buflen);
	}

	// 设置
	int val = 1;
	setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (void *)&val, sizeof(val));
	
	// 获取
	int on;
	socklen_t len2 = sizeof(on);
	r = getsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (void *)&on, &len2);
	if (r == 0) {
        printf("on = %d\n", on);
    }

    close(sockfd);
	return 0;
}

设置套接字选项,允许端口号重用

2. 广播

一对多的通信

a. 只有当传输层协议为UDP(SOCK_DGRAM)时,才支持广播功能
TCP是端对端的连接,通信前需要进行三次握手建立连接
广播是一对多的通信
b. 广播的地址问题,如果
发送广播,** 网络地址是哪里呢?
广播是向局域网中所有的主机发送信息
广播的地址是将IP地址中所有的主机号设置为1
即: xxx.xxx.xxx.255
例子:
你的IP:192.168.1.103
哪些是主机号你还不知道?
netmask:255.255.255.0
这个IP的局域网的广播地址是:192.168.1.255**

你的IP:192.168.1.103
哪些是主机号你还不知道?
netmask:255.255.0.0
这个IP的局域网的广播地址是:192.168.255.255

3. 多播(multicast)

单播用于两个主机之间端对端的通信,广播用于一个主机对整个局域网上所有的主机进行数据通信
单播和广播是两个极端

有时候,我们需要对一组特定的主机进行通信

=====>多播

相关推荐
网络研究院9 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智9 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest9 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_9 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
2601_961845159 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
程序猿阿伟9 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
InHand云飞小白9 天前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器
森G9 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt
江华森9 天前
TCP/IP 协议栈实战 — 7 个实验详解
网络·tcp/ip·智能路由器
酉鬼女又兒9 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php