栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux - setsockopt, ioctl 实现

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux - setsockopt, ioctl 实现

引用

  • linux 内核 IOCTL 网络控制框架实现分析

一. setsockopt 1.1 应用层接口
int setsockopt(int sockfd, int level, int optname,
    const void *optval, socklen_t optlen);
#include 
#include 

fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFL) | O_NONBLOCK));

ioctl(sockfd, FIONBIO, 1);		//1表示非阻塞,0表示阻塞
1.2 内核实现(linux-5.0)

1.3 选项

二. ioctl 2.1 应用层接口
#include 

int ioctl(int fd, ind request, …);
#include 
#include 

int main_client() {
	int sockfd = socket():
	
	struct timeval timeout;
	timeout.tv_sec = 0;
	timeout.tv_usec = 0;	//设置超时时间

	setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));

	ret = connect(sockfd, &serveraddr, sizeof(servaddr));
	if(ret == -1) {
		if(errno == EINPROGRESS) {		//connect超时返回-1,并设置errno为EINPROGRESS
			printf("connect timeoutn");
		}
		return -1;
	}
}
2.2 内核实现(linux-5.0)

 sock_ioctl()是套接字类型文件的ioctl接口实现。首先根据不同层次或类型调用相应的处理函数,然后,通过套接字传输层接口进入到不同类型的套接字的实现中。STREAM, DGRAM, RAW类型的套接字都是inet_ioctl()。

inet_ioctl()是IPv4协议族套接字层ioctl接口的实现函数。根据不同的层次(如,路由,ARP, 网络设备)调用相应的处理函数,而其他情况则通过传输层接口进入到不同的传输层中实现。

  • ip_rt_ioctl()用于处理添加和删除路由等。
  • arp_ioctl()用于创建,修改,获取或删除ARP表项。
  • dev_ioctl()用于修改或配置网络设备相关属性的,每个设备都可以定义自己的ioctl命令字,范围在 SIOCDEVPRIVATE - (SIOCDEVPRIVATE + 15)之间。
2.3 选项
 * 把和网络相关的请求request划分为下面 6 类:
 * (1)套接字操作
 * (2)文件操作
 * (3)接口操作
 * (4)ARP快速缓存操作
 * (5)路由表操作
 * (6)流系统

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号