详解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该怎么选。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis未授权访问漏洞

Redis未授权访问漏洞 一、未授权访问漏洞概述、二、Redis未授权访问特征三、Redis常用命令四、Redis历史漏洞4.1、Redis未授权访问4.2、Redis主从复制RCE 五、Reids未授权访问利用5.1、写webshell5.2、写定时任务反弹shell 一、未授权访问漏洞概述、 未授权访问漏洞可以理解为需…

【C++】Lambda表达式的使用

学习目标&#xff1a; 例如&#xff1a; 了解Lambda的优点 掌握Lambda表达式的使用 了解Lambda表达式的底层原理 学习内容&#xff1a; Lambda表达式的语法 文章目录 学习目标&#xff1a;学习内容&#xff1a;Lambda表达式排序案例Lambda表达式语法捕捉列表Lambda表达式模拟…

Javascript 数据结构[入门]

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

3年经验,面试测试岗只会功能测试开口要求18K,令我陷入沉思。

由于朋友临时有事&#xff0c; 所以今天我代替朋友进行一次面试&#xff0c;公司需要招聘一位自动化测试工程师&#xff0c;我以很认真负责的态度完成这个过程&#xff0c; 大概近30分钟。 主要是技术面试&#xff0c; 在近30分钟内&#xff0c; 我与被面试者是以交流学习的方式…

java linq多字段排序时间比较

public static void main(String[] args) {//100万条数据List<CrmInvestSaleUserCount> waitAssignUserList new ArrayList<>();for (int i 0; i < 1000000; i) {waitAssignUserList.add(new CrmInvestSaleUserCount().setSales_username("test" i…

架构训练营学习笔记:6-2 微服务基础选型

基础选型 微服务基础设施架构 优先级 其中&#xff0c;核心 就是服务注册、服务发现、服务路由。 模式1-嵌入SDK 模式2-反向代理式 模式3-网络代理式&#xff08;Service Mesh&#xff09; 模式对比 常见微服务框架选择 嵌入SDK-dubbo Spring Cloud 反向代理式 APISIX …

小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(一)

本文主要以SpringBoot微服务架构为基础&#xff0c;提出了前后端分离的MVVM模型&#xff0c;并对其进行了详细的分析以及研究&#xff0c;以此为相关领域的工作人员提供一定的技术性参考。 目录 1 研究背景 2 SpringBoot微服务优势 3 微服务 3.1 技术发展 3.2 技术优势 在…

流数据湖平台Apache Paimon(五)集成 Spark 引擎

文章目录 第4章 集成 Spark 引擎4.1 环境准备4.2 Catalog4.2.1 文件系统4.2.2 Hive 4.3 DDL4.3.1 建表4.3.2 修改表 第4章 集成 Spark 引擎 4.1 环境准备 Paimon 目前支持 Spark 3.4、3.3、3.2 和 3.1。课程使用的Spark版本是3.3.1。 1&#xff09;上传并解压Spark安装包 t…

MyBatis枚举映射类讨论

前言 本篇需要对于MyBatis有一定的认识&#xff0c;而且只是针对于TypeHandler接口来讨论&#xff0c;暂不讨论其他方面的问题 TypeHandler概叙 TypeHandler是MyBatis设计的一个用于参数的接口&#xff0c;你们会不会很好奇MyBatis是如何把整形&#xff0c;时间&#xff0c;字符…

模版下载和Excel文件导入

模版下载 模版下载 模版下载 /*** 生成模版** param* return AppResponse*/public AppResponse ExcelFile() throws IOException {// 创建一个新的Excel工作簿Workbook workbook new XSSFWorkbook();// 创建一个工作表Sheet sheet workbook.createSheet("页面拨测模板&…

C++类的定义和对象的创建

一、问题引入 C类和对象到底是什么意思&#xff1f; 1、C 中的类&#xff08;Class&#xff09;可以看做C语言中结构体&#xff08;Struct&#xff09;的升级版。结构体是一种构造类型&#xff0c;可以包含若干成员变量&#xff0c;每个成员变量的类型可以不同&#xff1b; …

2023-08-06力扣今日二题

链接&#xff1a; 剑指 Offer 09. 用两个栈实现队列 题意&#xff1a; 如题 解&#xff1a; 第一个栈逆序栈&#xff0c;存储插入顺序&#xff0c;另一个栈正序栈负责弹出数据 优化思想&#xff1a;只有当st2正序栈为空时才将st1逆序栈的转移过来&#xff08;若st2不为空…

使用langchain与你自己的数据对话(五):聊天机器人

之前我已经完成了使用langchain与你自己的数据对话的前四篇博客&#xff0c;还没有阅读这四篇博客的朋友可以先阅读一下&#xff1a; 使用langchain与你自己的数据对话(一)&#xff1a;文档加载与切割使用langchain与你自己的数据对话(二)&#xff1a;向量存储与嵌入使用langc…

【探索Linux】—— 强大的命令行工具 P.2(Linux下基本指令)

前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也相信大家都掌握的不错&#xff0c;今天博主将会新开一个Linux专题&#xff0c;带领大家继续学习有关Linux的内容。今天第一篇文章博主首先带领大家了解一下…

uniapp两个单页面之间进行传参

1.单页面传参&#xff1a;A --> B url: .....?code JSON.stringify(param), 2.单页面传参B–>Auni.$emit() uni.$on()

Python爬虫——解析_jsonpath解析淘票票网站

jsonpath简单解析淘票票网站&#xff0c;获取城市名称 代码如下&#xff1a; import urllib.request import json import jsonpathurl https://dianying.taobao.com/cityAction.json?activityId&_ksTS1691330599914_108&jsoncallbackjsonp109&actioncityAction&…

使用HTTP隧道时如何应对目标网站的反爬虫监测?

在进行网络抓取时&#xff0c;我们常常会遇到目标网站对反爬虫的监测和封禁。为了规避这些风险&#xff0c;使用代理IP成为一种常见的方法。然而&#xff0c;如何应对目标网站的反爬虫监测&#xff0c;既能保证数据的稳定性&#xff0c;又能确保抓取过程的安全性呢&#xff1f;…

【学习笔记】[SDOI2017] 硬币游戏

抽象&#x1f605; 我忍不了了&#xff0c;直接上概率生成函数&#x1f605; 首先要做过这道题 [CTSC2006] 歌唱王国 设 F i ( x ) ∑ f j x j F_i(x)\sum f_jx^j Fi​(x)∑fj​xj&#xff0c;其中 f j f_j fj​表示 ∣ T ∣ j |T|j ∣T∣j时第 i i i个人获胜的概率 设 …

[CKA]考试之查看pod的cpu

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 找出标签是namecpu-loader的Pod&#xff0c;并过滤出使用CPU最高的Pod&#…

用python实现猜数字游戏

1 问题 如何来判断玩家输入的数据类型来避免报错&#xff1f; 解决&#xff1a; 使用isdigit函数来判断玩家输入的数据类型是否为数字&#xff0c;是则继续运行反之则提醒玩家输入的内容不合法。 如何限制玩家输入字符的数量&#xff1f; 解决&#xff1a;定义一个最大常量和最…