UNIX网络编程(UNP) 第四章学习笔记

2023-10-31

总括内容

我们不妨先来看下tcp客户端/服务端程序的套接字函数

我们可以看到服务端的起始到结束包含了 socket()->bind()->listen()->read()<->write()->close()

而客户端则是socket()->connect()->write()<->read()->close()

接下来,我们顺着这个调用顺序,从socket开始讲解tcp套接字函数

socket函数
函数定义

socket函数在<sys/socket.h>里面,函数定义为

int     socket(int family, int type, int protocol);

期中family是协议族,就是指示是使用IPv4还是IPv6或者一些更特殊的协议族,常用的主要是AF_INET,AF_INET6,分别表示IPv4和IPv6

type则是套接字类型,包括字节流套接字,数据包套接字等,常用的主要是SOCK_STREAM(常用于TCP),SOCK_DGRAM(UDP)

protocol是指特定的协议,因为family和protocol一般组合起来已经可以确定协议,所以可以填0表示使用默认值,不过也可以特别用来指定使用STCP等

常用套路
int tcp_fd=socket(AF_INET,SOCK_STREAM,0);//应用于IPv4协议采用tcp
int udp_fd=socket(AF_INET,SOCK_DGRAM,0);//应用于IPv4协议采用udp
具体解释

下面是family具体可取值以及解释

family 意义
AF_INET IPv4协议
AF_INET6 IPv6协议
AF_LOCAL unix域协议
AF_ROUTE 路由套接字
AF_KEY 秘钥套接字

下面则是type具体可取值以及解释

type 意义
SOCK_STREAM 字节流套接字,常用于TCP
SOCK_DGRAM 数据包套接字,常用于UDP
SOCK_SEQPACKET 有序分组套接字,常用于SCTP
SOCK_RAW 原始套接字,可以认为是IP层

我们之前提到两两组合的可能性,下面是特定的family和type组合后的结果,空格表示不可组合

AF_INET AF_INET6 AF_LOCAL AF_ROUTE AF_KEY
SOCK_STREAM TCP/SCTP TCP/SCTP 可用
SOCK_DGRAM UDP UDP 可用
SOCK_SEQPACKET SCTP SCTP 可用
SOCK_RAW IPv4 IPv6 可用 可用

下面是protocol的具体取值,可以看到就是tcp,udp和sctp

<
protocol 说明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UNIX网络编程(UNP) 第四章学习笔记 的相关文章

  • 在C语言中如何清屏? [复制]

    这个问题在这里已经有答案了 我想清除屏幕上的所有文字 我尝试过使用 include
  • 在 Unix 中添加用户和组

    有谁知道在unix中添加用户和组以及删除它们的api吗 我想以编程方式执行此操作 谢谢 坦率 我开始查看一些系统调用并发现以下内容 请注意 它们具有不同的标准 因此并非所有标准都可以在您的 Unix 版本上运行 getpwent setpw
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • SCP 权限被拒绝(公钥)。仅当在目录上使用 -r 标志时才在 EC2 上

    scp r Applications XAMPP htdocs keypairfile pem uploads ec2 user publicdns var www html 其中 uploads 是目录 返回权限被拒绝 公钥 Howeve
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • 如何通过 UNIX mailx 命令发送电子邮件?

    如何通过 UNIX 发送电子邮件mailx命令 一个例子 echo something mailx s subject email protected cdn cgi l email protection 发送附件 uuencode fil
  • UNIX系统调用监视器

    如何监控进程的系统调用 Check strace http linux die net man 1 strace 在最简单的情况下 strace 运行指定的命令直到退出 它拦截并记录进程调用的系统调用以及进程接收的信号 每个系统调用的名称
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • awk/Unix 分组依据

    有这个文本文件 name age joe 42 jim 20 bob 15 mike 24 mike 15 mike 54 bob 21 试图得到这个 计数 joe 1 jim 1 bob 2 mike 3 Thanks awk F NR
  • 第二次ftruncate失败

    我试图在首次成功执行 shm open 和 ftruncate 后超出共享内存对象 这是代码 char uuid GenerateUUID int fd shm open uuid O RDWR O CREAT O EXCL S IRUSR
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • wget 并行下载文件并重命名

    我有一个包含两列的文本文件 第一列是要保存的名称 第二列是资源的 url 地址 10000899567110806314 jpg http lifestyle inquirer net files 2018 07 t0724cheekee
  • #*/ 在 UNIX Shell 脚本中使用

    谁能详细说明 在 UNIX Shell 脚本中的工作原理 我已经看到它在 Korn Shell 中的使用 它专门用于删除文件的扩展名 例如 func write app log o 删除状态文件 CIE STATUS FILE 这里假设文件
  • UNIX时间记录时区吗?

    我想问一下UNIX时间 UNIX时间是否记录时区 我将托管从美国芝加哥移至 JST 问题是我的整个 MySQL 数据库都有 UNIX 时间 芝加哥 美国时区 的记录 我有一个 PHP 代码来显示之前的时间 例如 3 天前 昨天等 当我搬到新
  • 通过 Node.js 运行 bash 脚本 - 非法选项 -o pipelinefail

    我正在尝试使用 Node js 执行 bash 脚本child process exec 然而它在文件的第二行爆炸 usr bin env bash set eo pipefail TRACE set x echo we are here
  • BASH 中带有千位分隔符的数字格式

    我有一个号码12343423455 23353 我想用千位分隔符格式化数字 所以输出将是12 343 423 455 23353 printf 3f n 12345678 901 12 345 678 901
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • shell脚本中是否有互斥/信号量机制?

    我正在 shell 脚本中寻找互斥 信号量 并发机制 考虑以下情况 除非 a 用户不关闭共享文件 否则 b 用户应该无法打开 更新它 我只是想知道如何在 shell 脚本中实现互斥量 信号量 临界区等 在 shell 脚本中实现锁定机制 文
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分

随机推荐

  • 2023年新自采集壁纸网页源码+简约大气

    正文 一款壁纸网页源码 但这款源码是有网友改了一下接口 但还是挺不错的 有兴趣的可以自己去搭建体验 我也搭建了演示站 感觉挺行 界面美观大气 壁纸也很多 类型也比较多 程序 wwidsu lanzout com i3ZHQ0f7dqli 图
  • Hibernate --- hibernate.cfg.xml核心配置文件详解

    一 Hibernate配置文件加载流程 1 通过Configuration config new Configuration configure 加载默认配置文件 2 Configuration的configure 方法 注意 hibern
  • LeetCode总结 -- 图篇

    图的算法跟树一样是准备面试中必不可少的一块 不过图的方法很容易概括 面试中考核的无非就是两种搜索算法 深度优先搜索和广度优先搜索 LeetCode中关于图的问题有以下几个 Clone Graph Word Ladder Word Ladde
  • 【华为OD机试真题】不含101的数(python版)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 不含101的数 时间限制 1s空间限制 256MB限定语言 不限 题目描述 小明在学习二进制
  • 堪称一绝,阿里技术人都用的Nginx笔记手册,应用到架构齐全

    有人调侃我们说 程序员不如送外卖 送外卖是搬运食物 自己是搬运代码 都不产出新的东西 透支体力 又消耗健康 可替代性极强 30岁之后就要面临被优化的危险 想跳槽 但是更高的平台难进 同级别的平台又是重复 想利用业余时间学习提升 但是自己能力
  • mininet+pox+poxdesk使用入门

    mininet pox poxdesk使用入门 前提是安装好mininet以及pox和poxdesk模块 接下来就是如何使用 笔者环境是Win7环境下VMware Workstation新建虚拟机上运行Ubuntu 12 0 首先在新打开的
  • 面试题(vue,react,前端)

    目录 1 说说React生命周期中有哪些坑 如何避免 2 说说Real diff算法是怎么运作的 3 调和阶段setState干了什么 4 说说redux的实现原理是什么 写出核心代码 5 React合成事件的原理 6 React组件之间如
  • java后端生成图形验证码、前端接收并展示

    1 工具类 import java awt Color import java awt Font import java awt Graphics import java awt Graphics2D import java awt Ren
  • PHP中的数据类型有哪些?

    嗨 大家好 今天 我们来了解一下PHP中的数据类型 首先 让我们来介绍一下PHP中的基本数据类型 在PHP中 有六种基本数据类型 它们分别是 整数型 int 用于存储整数 例如 123 456等 浮点型 float 用于存储带有小数点的数
  • Linux删除文件后,发现磁盘空间没有释放-lsof

    最近碰到磁盘快满了 原因是程序错误导致日志爆炸性增长 于是直接删除日志文件 然后df h 发现磁盘空间一点都没下降 还是原来的90 使用率 有点奇怪 百度了解到 日志文件被删除之前文件处于被其他进程占用状态 即使删除 依然占用空间 通过ls
  • STL源码分析:sort函数

    目录 支持sort的容器 几种涉及到的排序算法 插入排序 快速排序 堆排序 sort函数的策略 sort函数的实现 STL的sort函数非常常用 不同的STL版本有不同的实现方式 本文就来说一下SGI STL中是如何实现sort函数的 so
  • 408计算机网络(王道版)

    408计算机网络第一章总结 408计算机网络第二章总结 408计算机网络第三章总结 408计算机网络第四章总结 408计算机网络第五章总结 408计算机网络第六章总结 408计算机网络第一轮反思
  • QHash 与 QMap的区别

    QMap QMap是Qt的一个模板类 它是基于红黑树算的的一套字典 是Qt容器中的一种 它的原型是 QMap原型为class QMap
  • 2023.01.11 某国企前端笔试题一部分

    什么时候开始记录都不算晚 即使已经是晚了 但是再早的东西也会有淘汰的时候 收藏另说 问题主要选取一些高频和基础的问题 问题的回答只是本人的理解 非参考答案 有些答案只给个提示 详解可谷歌百度或在掘金内搜索相关文章 同时本人每次回顾更新文章都
  • 大数据-玩转数据-Flink定时器

    一 说明 基于处理时间或者事件时间处理过一个元素之后 注册一个定时器 然后指定的时间执行 Context和OnTimerContext所持有的TimerService对象拥有以下方法 currentProcessingTime Long 返
  • MYSQL面试题

    1 什么是MySQL多实例 如何配置MySQL多实例 多实例的优缺点 答案 https blog 51cto com superpcm 2094744 2 如何加强MySQL数据的安全 请你给出可行的思路 答案 https blog csd
  • 李开复李彦宏奥特曼获评全球AI领袖,《时代》出品,全球100人

    西风 发自 凹非寺量子位 公众号 QbitAI 时代周刊 首次发布世界AI最具影响力人物榜 100位学界业界大佬齐聚于此 这其中就包括吴恩达教授 李飞飞教授 创新工场CEO李开复 百度CEO李彦宏 OpenAI CEO Sam Altman
  • 【软件测试】快速入行软件测试

    快速入行软件测试 1 初识软件测试 软件测试的前景与现状 软件测试越来越被企业重视 人才稀缺 市场需求扩大 软件测试人员的职业生涯规划 技术型路线 自动化测试工程师 性能测试工程师 安全测试工程师等 管理型路线 测试主管 测试经理 测试总监
  • 解决Python配置Opencv报错recursion is detected during loading of "cv2" binary extensions的问题

    解决Python配置Opencv报错recursion is detected during loading of cv2 binary extensions的问题 使用pip卸载opencv pip uninstall opencv 具体
  • UNIX网络编程(UNP) 第四章学习笔记

    文章目录 总括内容 socket函数 函数定义 常用套路 具体解释 题外话 connect函数 函数定义 常用套路 具体解释 题外话 实战尝试 bind函数