详解Linux中的socket函数
2023年8月3日,周四下午
目录
- 函数原型
- 参数domain
- 参数type
- 参数protocol
- 举例说明
- 参数type和参数protocol之间的关系
函数原型
#include <sys/socket.h>int socket(int domain, int type, int protocol);
参数domain
domain是“域”的意思,其值为AF_INET
在Linux系统中,domain参数用于指定套接字的协议域(protocol domain),它定义了套接字通信的协议族。
以下是Linux系统中一些常见的domain值:
AF_UNIX:Unix 域协议域,用于本地通信(Inter-process communication,IPC)。它使用文件路径作为套接字地址,用于同一台机器上的进程间通信。AF_INET:IPv4 协议域,用于 Internet 地址族。这是最常见的协议域,用于基于 IPv4 的网络通信。AF_INET6:IPv6 协议域,用于 IPv6 地址族。这是用于基于 IPv6 的网络通信。AF_PACKET:用于原始网络数据包的协议域。它允许应用程序直接访问网络帧,适用于网络协议分析和数据包捕获等场景。AF_BLUETOOTH:蓝牙协议域,用于蓝牙通信。AF_X25:X.25 协议域,用于 X.25 网络协议。AF_NETLINK:Netlink 协议域,用于 Linux 内核与用户空间进程之间的通信。AF_PACKET:原始数据链路层套接字,允许应用程序直接访问数据链路层帧。
参数type
type指定套接字的类型,可以是以下值之一:
-
SOCK_STREAM:流套接字,用于可靠、面向连接的服务。对应于 TCP 协议。 -
SOCK_DGRAM:数据报套接字,用于无连接、不可靠的服务。对应于 UDP 协议。 -
SOCK_SEQPACKET:顺序数据包套接字,在 SCTP 协议中使用。 -
SOCK_RAW:原始套接字,用于直接访问底层网络协议。可以自定义协议头部并发送。 -
SOCK_RDM:可靠数据报套接字,很少使用。 -
SOCK_PACKET:废弃的套接字类型,已经不再使用。
参数protocol
在socket函数中,protocol参数用于指定套接字使用的协议。
协议(protocol)是一组规则和约定,用于在网络中的不同节点之间进行通信和数据交换。
下面是一些常见的protocol参数值及其对应的协议:
IPPROTO_TCP:TCP(Transmission Control Protocol)协议。它是一种面向连接的、可靠的、基于字节流的传输协议,用于提供可靠的数据传输。IPPROTO_UDP:UDP(User Datagram Protocol)协议。它是一种无连接的、不可靠的、基于数据报的传输协议,用于提供快速的数据传输,但不保证数据的可靠性和顺序性。IPPROTO_SCTP:SCTP(Stream Control Transmission Protocol)协议。它是一种面向连接的、可靠的、基于消息的传输协议,提供了可靠的数据传输和流量控制等功能。IPPROTO_ICMP:ICMP(Internet Control Message Protocol)协议。它是一种网络层协议,用于在网络中传递控制信息和错误报文,如网络不可达、请求超时等。IPPROTO_IGMP:IGMP(Internet Group Management Protocol)协议。它是一种组播协议,用于在 IP 网络中进行组播组的管理和维护。IPPROTO_RAW:原始 IP 协议。它允许应用程序直接访问网络层的数据,可用于构造和发送自定义的 IP 报文。
需要注意的是,protocol参数的具体取值取决于所选择的协议域(domain)和套接字类型(type)。在某些情况下,可以将protocol设置为0,表示使用默认协议。此时,系统会根据协议域和套接字类型自动选择适合的协议。
举例说明
// 创建 TCP 套接字
int tcpSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 创建 UDP 套接字
int udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);// 创建 ICMP 套接字
int icmpSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);// 创建 SCTP 套接字
int sctpSocket = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);// 创建 RAW 套接字
int rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);// 创建 IGMP 套接字
int igmpSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
参数type和参数protocol之间的关系
一般来说:
- SOCK_STREAM 对应 IPPROTO_TCP
- SOCK_DGRAM 对应 IPPROTO_UDP
- SOCK_SEQPACKET 对应 IPPROTO_SCTP
- SOCK_RAW 对应 IPPROTO_ICMP、IPPROTO_RAW和IPPROTO_IGMP
由此,你可以大概知道当Linux中的socket函数的参数domain和参数type确定后,参数protocol该怎么选。
相关文章:
详解Linux中的socket函数
2023年8月3日,周四下午 目录 函数原型参数domain参数type参数protocol举例说明参数type和参数protocol之间的关系 函数原型 #include <sys/socket.h>int socket(int domain, int type, int protocol);参数domain domain是“域”的意思,其值为AF…...
React Antd 实现表格合计功能
思路:首先拿到 表格数组对象,然后写一个工具类,然后向数组对象最后插入一条数据,这条数据的字段时根据表格数组里合计算出来的。 代码如下,需根据各自业务稍作改动: <Table dataSource{tableData}column…...
尝试一下Guava带返回值的多线程处理类ListenableFuture
文章目录 ListenableFuture,带返回值的Guava多线程处理工具类举个例子扩展阅读 最近在学习,Java实现异步编程的8种方式这篇博客的时候,没有找到比较好的一个学习demo,故在此整理一下。 ListenableFuture,带返回值的Gua…...
微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID
微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID 问题解决方法 问题 微信开发者工具中调试微信小程序,在开发工具里面调试没问题,但是真机调试的时候报ERR_CERT_AUTHORITY_INVALID错误 解决方法 到这个站点检查域名的Https证书的安全性 : 传送门(注:…...
JCommander + AutoService打造带子命令的Java命令行应用
文章目录 需求Java命令行工具库依赖库定义各个子命令主类CLI测试一下参考文档 需求 最近想将自己的一个Java应用包装成命令行工具,看了几个库,最后选取了JCommander,结合AutoService库,实现了带子命令的工具,方便扩展…...
pycharm运行pytest无法实时输出信息
需要去掉控制台输出。根据查询相关信息显示pycharm运行pytest无法实时输出信息,需要去掉pycharm里面的运行模式,点击减号,再点击加号,添加python执行文件即可实时输出信息。 问题描述: 使用pycharm运行代码时&#x…...
Mac 卸载 IntelliJ IDEA 方法
Mac 系统下 IDEA 没有一键卸载程序,也没有完全卸载的插件,若要彻底删除,除了在应用(Application)里删除 IDEA 到垃圾桶外,还需要在终端(Terminal)执行删除相应的文件及文件夹。 1 分…...
数据安全能力框架模型-详细解读(三)
数据安全能力框架内涵 “奇安信数据安全能力框架”体现了数据安全治理从组织机构安全治理,到数字化环境具体管控、分析能力分层逐步落实的工程方法。 它以企业数据安全的战略目标和风险容忍度为输入,明确数据安全治理的组织;以合规与治理需…...
vscode启动leiningen项目
要在 VS Code 中启动 Leiningen 项目,你可以按照以下步骤进行操作: 确保已经安装了 Leiningen。你可以在终端中输入 lein version 来检查是否已成功安装。 在 VS Code 中安装 Leiningen 扩展。打开 VS Code,点击左侧的扩展图标(四…...
Qt事件的传递顺序
事件的传递顺序 事件的传递顺序是这样的:先是事件过滤器,然后是该部件的event()函数,最后是该部件的事件处理函数。这里还要注意,event()函数和事件处理函数,是在该部件内进行重新定义的,而事件过滤器却是…...
基于facenet+faiss开发构建人脸识别系统
facenet是一款非常经典的神经网络模型,它可以直接学习从人脸图像到欧几里德空间的映射(直接将人脸映射到欧几里得空间)。在欧几里德空间中,距离直接对应于人脸相似性的度量。一旦这个空间产生,使用标准技术,将FaceNet嵌入作为特征…...
数据分析的心脏:获取数据的好工具
打开网站:Scrape and Monitor Data from Any Website with No Code 新建机器人: 选择类型: 填写目标网站网址: 输入网址:https://cn.wsj.com/zh-hans/news/technology 第一次录制需要安装chrome插件: 并设置…...
【万字长文】SpringBoot整合Atomikos实现多数据源分布式事务(提供Gitee源码)
前言:在最近的实际开发的过程中,遇到了在多数据源的情况下要保证原子性的问题,这个问题当时遇到了也是思考了一段时间,后来通过搜集大量资料与学习,最后是采用了分布式事务来解决这个问题,在讲解之前&#…...
js中什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?
目录 目录 目录 参考资料 必看强烈建议十分钟看完视频 ,即可学会 必看参考详解宏任务微任务 参考资料 1 宏任务与微任务_哔哩哔哩_bilibili 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?_什么是宏任务和微任…...
Word中如何断开表格中线段
Word中如何断开表格中线段_word表格断线怎么弄_仰望星空_LiDAR的博客-CSDN博客有时候为了美观,需要实现如下的效果,即第2条线段被断开成3段步骤如下:选中需要断开的格网,如下,再选择段落、针对下框标即可。_word表格断…...
大数据指标体系-笔记
指标体系 1 总体流程图 1.1 2 模型‘ 2.1 OSM OSM(Object,Strategy,Measure) 「业务度量」涉及到以下两个概念:一个是KPI ,用来直 接衡量策略的有效性;一个是Target,是预先给出的值,用来判断是否达到预期 2.2 UJM User, Journey, Map 2.3 AARRR-海盗 AARRR(Acquisitio…...
Arthas协助MQ消费性能优化
背景 项目中使用AWS的SQS消息队列进行异步处理,QA通过压测发现单机TPS在23左右,目标性能在500TPS,所以需要对消费逻辑进行优化,提升消费速度。 目标 消费TPS从23提升到500 优化流程 优化的思路是先分析定位性能瓶颈ÿ…...
【Linux】【docker】安装sonarQube免费社区版9.9
文章目录 ⛺sonarQube 镜像容器⛺Linux 安装镜像🍁出现 Permission denied的异常🍁安装sonarQube 中文包🍁重启服务 ⛺代码上传到sonarQube扫描🍁java语言配置🍁配置 JS TS Php Go Python⛏️出现异常sonar-scanner.ba…...
C/C++实现librosa音频处理库melspectrogram和mfcc
C/C实现librosa音频处理库melspectrogram和mfcc 目录 C/C实现librosa音频处理库melspectrogram和mfcc 1.项目结构 2.依赖环境 3.C librosa音频处理库实现 (1) 对齐读取音频文件 (2) 对齐melspectrogram (3) 对齐MFCC 4.Demo运行 5.librosa库C源码下载 深度学习语音处…...
浪潮服务器硬盘指示灯显示黄色的服务器数据恢复案例
服务器数据恢复环境: 宁夏某市某单位的一台浪潮服务器,该服务器中有一组由6块SAS硬盘组建的RAID5阵列。 服务器上存放的是Oracle数据库文件,操作系统层面划分了1个卷。 服务器故障&初检: 服务器在运行过程中有两块磁盘的指示灯…...
快速入门:Ollama部署Yi-Coder-1.5B,5分钟搭建编程助手
快速入门:Ollama部署Yi-Coder-1.5B,5分钟搭建编程助手 1. 为什么选择Yi-Coder-1.5B? Yi-Coder-1.5B是一个轻量级但功能强大的开源代码生成模型,特别适合开发者日常使用。它最大的优势是在保持小体积(仅15亿参数&…...
5*5窗口的高斯滤波模板
本文介绍了一个55高斯模板的生成过程。首先以标准差σ3创建初始模板矩阵,通过双重循环计算每个位置的高斯函数值。随后对模板进行归一化处理,确保系数总和为1。最后将归一化后的模板进行1024倍定点化处理,便于后续数字信号处理应用。该代码实…...
一款基于 .NET 开源、跨平台应用程序自动升级组件露
基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...
再次革新 .NET 的构建和发布方式(一)日
本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...
Nextjs从入门到实战保姆级教程:环境配置与项目初始化
本系列文章将围绕Next.js技术栈,旨在为AI Agent开发者提供一套完整的客户端侧工程实践指南。 本章将引导你完成 Next.js 开发环境的搭建,创建第一个项目并理解其基本结构。我们将详细说明每个步骤的原理,确保你不仅知道"怎么做"&am…...
旋转变压器:从电磁耦合到高精度位置解算的工程实践
1. 旋转变压器:工业自动化的"角度翻译官" 第一次接触旋转变压器是在五年前的伺服电机调试现场,当时电机总是出现位置漂移,排查了半天才发现是旋变信号解算出了问题。这种看似简单的电磁元件,实则是工业自动化系统中不可…...
PaddlePaddle-GPU环境配置:为什么你的显卡总是被识别成CPU?(附解决方案)
PaddlePaddle-GPU环境配置:为什么你的显卡总是被识别成CPU?(附解决方案) 刚拿到新显卡准备大展拳脚,却发现PaddlePaddle死活不认GPU,这种挫败感我太懂了。明明花大价钱买的显卡,结果深度学习训…...
写段代码教会你什么是HOOK技术?HOOK技术能干什么?品
为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实…...
从DINO Score到LLaVA:拆解SPAA论文如何用“双考官”机制筛选高质量AI修图
从DINO Score到LLaVA:构建AI图像编辑的"双考官"质量评估体系 在AI图像编辑技术快速发展的今天,如何系统评估生成结果的质量已成为产品落地的关键瓶颈。传统方法往往依赖人工审核或单一指标,既难以规模化又无法全面捕捉图像修改的语…...
从‘轮胎压力传感器’到‘魔数饼干’:手把手拆解SOME/IP协议栈的五个核心通信模型
从轮胎压力到魔数饼干:SOME/IP协议栈五大通信模型实战解码 1. 引言:当汽车电子遇上分布式通信 想象一下,你驾驶的现代汽车正以每小时100公里的速度飞驰,此时轮胎压力监测系统突然检测到右前轮气压异常。这个信号需要以毫秒级速度传…...
