tcp协议下的socket函数

目录

1.socket函数

2.地址转换函数

1.字符串转in_addr的函数:​编辑

2.in_addr转字符串的函数:​编辑

1.关于inet_ntoa函数

3.listen函数

4.简单的Server模型

1.初步模型

1.sock函数和accept函数返回值的sockfd的区别

2.运行结果和127.0.0.1的意义

2.单进程模板

3.多进程模板

1.让孙子执行代码,子进程退出

2.让父进程接受到子进程退出的信号是选择忽略

4.多线程模板

5.线程池模板


1.建议先看一下udp协议:udp协议下的socket函数_udp socket函数-CSDN博客

1.socket函数

其实从上面两个区别,就能看出socket下的type使用的区别了,tcp用的是SOCK_STREM.

2.地址转换函数

1.字符串转in_addr的函数:

2.in_addr转字符串的函数:

1.关于inet_ntoa函数

inet_ntoa这个函数返回了一个char*,很显然是这个函数自己在内部给我们申请了一块内存空间,那是否需要我们自己手动释放呢?

man手册上说,inet_ntoa函数,是把这个返回值结果放到了静态存储区,这个时候就不需要我们手动释放了。但是问题来了,如果我们调用多次这个函数,会有什么样的效果呢?

运行结果:

所以我们下次应避免使用这个函数。

但是在多线程的情况下运行是没有这个情况的,理论上线程是共享内存地址空间的,那么开辟的静态空间也是重复的!但是,(我承认下面这段是copy的,哈哈哈哈)

inet_ntoa() 函数的行为依赖于实现它的库和编译器环境。在标准 C 库(如 glibc)的早期版本中,inet_ntoa() 确实返回指向内部静态缓冲区的指针,这意味着多次调用 inet_ntoa() 可能会覆盖先前的结果,特别是在多线程环境中。

然而,现代的 C 库(如 glibc 2.24 及以上版本)和编译器环境(如 GCC 和 Clang)通常会对 inet_ntoa() 进行优化,使其在多线程环境中更加安全。这些优化通常涉及使用线程局部存储(TLS)来为每个线程分配独立的缓冲区,或者在每次调用时分配一个新的栈上缓冲区。

3.listen函数

Tcp是面向连接的,服务器一般是比较“被动的”,服务器一直处于一种:一直在等待连接到来的状态。

backlog不要设置的太大,具体作用后面再讲。

4.简单的Server模型

1.初步模型

main.cc

UdpServer.hpp

1.sock函数和accept函数返回值的sockfd的区别

sock函数和accept函数的返回值都是sockfd,那么他们之间有什么区别呢?你可以把sock函数返回的sockfd当做招揽客户进入餐厅的员工,而accept返回的sockfd是具体服务进来客户的员工!

2.运行结果和127.0.0.1的意义

可以通过右边telnet来连接主机,而127.0.0.1是主机回环地址,

更详细的请看这篇博主写的:彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0 - 简书

2.单进程模板

缺点就是每次只能有一个客户进去,这样肯定不行的。

3.多进程模板

其实稍微仔细观察,就发现他其实接受不了多个客户,因为父进程需要等待还没有退出的子进程,不然会僵尸。所以有些人说那就轮询啊,但是那又要存储子进程的pid值,但是后面回收还是存在问题,还要数组存储退掉的子进程和没有退掉的子进程。

1.让孙子执行代码,子进程退出

2.让父进程接受到子进程退出的信号是选择忽略

我在这篇博客的最后面提到过。

linux信号的概念-CSDN博客

但是进程的创建是很大的,所以我们需要用线程来执行方案。

4.多线程模板

5.线程池模板

thread_pool.hpp

Linux线程池-CSDN博客

Task.hpp

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

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

相关文章

【游戏/社交】BFS算法评价用户核心程度or人群扩量(基于SparkGraphX)

【游戏/社交】BFS算法评价用户核心程度or人群扩量(基于SparkGraphX) 在游戏和社交网络领域,评估用户的核心程度或进行人群扩量是提升用户粘性和拓展社交圈的关键。广度优先搜索(BFS)算法以其在图结构中评估节点重要性…

[C/C++入门][变量和运算]9、数据类型以及占用存储空间大小

我们都知道,C中包含了多种数据类型 数据类型占用字节数中文名称注释char1字符型存储单个字符,通常为8位。signed char1有符号字符型字符型的有符号版本,可用于表示-128至127之间的整数。unsigned char1无符号字符型字符型的无符号版本&#…

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在本地机器上构建和运行语言模型,提供了一个简单易用的API来创建、运行和管理模型,同时还提供了丰富的预构建模型库,这些模型可以轻松地应用在多种应用场景中。O…

arm 内联汇编基础

一、 Arm架构寄存器体系熟悉 基于arm neon 实现的代码有 intrinsic 和inline assembly 两种实现。 1.1 通用寄存器 arm v7 有 16 个 32-bit 通用寄存器,用 r0-r15 表示。 arm v8 有 31 个 64-bit 通用寄存器,用 x0-x30 表示,和 v7 不一样…

如何在 PostgreSQL 中处理海量数据的存储和检索?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 如何在 PostgreSQL 中处理海量数据的存储和检索?一、优化表结构设计二、分区技术三、数据压…

ceph log内容解析

log内容构造 如osd的一条log 分别表示 时间戳 线程id 日志等级 子模块 内容实体 剖析源码实现 每条log都是由一个Entry构成 定义在src/log/entry.h中 Entry(short pr, short sub) :m_stamp(clock().now()), // 打印日志时的时间戳m_thread(pthread_self()), // 打印日志的线…

【精品资料】智慧物流园区整体架构方案(46页PPT)

引言:智慧物流园区整体架构方案是一个集现代信息技术、物联网、大数据、云计算及人工智能等前沿科技于一体的综合性物流园区建设蓝图。该方案旨在通过高度集成和智能化的系统,优化物流流程,提升运营效率,降低运营成本,…

智慧新零售移动端收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

“信息科技风险管理”和“IT审计智能辅助”两个大模块的部分功能详细介绍:

数字风险赋能中心简介 数字风险赋能中心简介 ,时长05:13 大家好!我是AI主播安欣,我给大家介绍一下数字风险赋能中心。 大家都知道当前我国政企机构的数字化转型已经进入深水区,数字化转型在给我们带来大量创新红利的同时&#xf…

2024年第二季度 DDoS 威胁趋势报告

2024 年上半年,Cloudflare 缓解了 850 万次 DDoS 攻击:第一季度 450 万次,第二季度 400 万次。总体而言,第二季度 DDoS 攻击数量环比下降了 11%,但同比增长了 20%。 DDoS 攻击分布(按类型和手段&#xff09…

Python+Django+MySQL的新闻发布管理系统【附源码,运行简单】

PythonDjangoMySQL的新闻发布管理系统【附源码,运行简单】 总览 1、《新闻发布管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 新闻新增界面2.4 文章编辑界面2.5 新闻详情页2.7 其他功能贴图 3、下载 总览 自己做的项目&…

破解打家劫舍:动态规划与二分查找的高效算法

目录 198. 打家劫舍 解法一:一维动态规划 解法二:二维动态规划 213. 打家劫舍 II 思路分析 代码实现 337. 打家劫舍 III 思路分析 代码实现 2560. 打家劫舍 IV 思路分析 参考博客 198. 打家劫舍 如果两间相邻的房屋在同一晚上被小偷闯入,系统…

【Qt】QWidget核心属性相关API

目录 一. enabled——是否可用 二. geometry——几何位置 window frame 三. windowTitle——窗口标题 四. windowIcon——窗口图标 ​qrc文件 五. windowOpacity——透明度 六. cursor——光标 自定义光标 七. font——字体 八. toolTip——提示栏 九. focusPolic…

【QT】QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)

一、Qt 背景介绍 1、什么是 Qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。 它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展。Qt 为开发者提供了一种基于组件的开发模式,开发者可以通过简单的拖拽和…

天空星LVGL移植记录

一、移植的LVGL版本8.2 下载地址:(网页下个加速脚本)GitHub - lvgl/lvgl: Embedded graphics library to create beautiful UIs for any MCU, MPU and display type.https://github.com/lvgl/lvgl 二、硬件设备 天空星STM32F407VET6 ILI9…

vue3中provide 和 inject 用法#Vue3中解决局部刷新问题

vue3中provide 和 inject 用法#Vue3中解决局部刷新问题 在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件&…

【JavaScript 算法】KMP算法:高效的字符串匹配

🔥 个人主页:空白诗 文章目录 一、算法原理部分匹配表的构建 二、算法实现构建部分匹配表KMP字符串匹配注释说明: 三、应用场景四、总结 KMP算法(Knuth-Morris-Pratt Algorithm)是一种用于在文本中高效查找子串的字符串…

昇思学习打卡-21-生成式/Diffusion扩散模型

文章目录 Diffusion扩散模型介绍模型推理结果 Diffusion扩散模型介绍 关于扩散模型(Diffusion Models)有很多种理解,除了本文介绍的离散时间视角外,还有连续时间视角、概率分布转换视角、马尔可夫链视角、能量函数视角、数据增强…

【BUG】已解决:AttributeError: ‘DataFrame‘ object has no attribute ‘append‘

已解决:AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 目录 已解决:AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 【常见模块错误】 错误原因: 解决办法: 欢迎来到英杰社区https:/…

215. 数组中的第K个最大元素 347. 前 K 个高频元素(LeetCode热题100)

215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 写个快排&#xff0c;使数组升序&#xff0c;返回倒数第k个元素即可 func quickSort(nums []int, l int, r int) {if l > r {return}x : nums[(l r) / 2]i : l - 1j : r 1for i < j {for {iif n…