tcp协议下的socket函数

news2024/11/13 4:55:04

目录

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.coloradmin.cn/o/1936121.html

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

相关文章

如何设计数据中心100G网络光纤布线

随着全球企业对带宽的需求呈指数级增长,数据中心需要升级以增强其计算、存储和网络能力。数据中心从10G/25G向100G迁移成为必然趋势。随着网络升级,数据中心的光纤布线系统也需要随之优化。本文将指导您如何设计数据中心100G网络光纤布线。 100G以太网的…

【LSTM和GRU极简,和最新的TT也就是状态】机器学习模型来学习状态

LSTM(长短期记忆网络)中的关键参数包括输入门、遗忘门、输出门、细胞状态和隐藏状态。以下是如何进行推理计算的示例: LSTM参数和公式 输入门(i_t):决定输入的信息量。 遗忘门(f_t&#xff0…

路网双线合并单线——ArcGIS 解决方法

路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义:具有不同流向、不同平面结构的道路。此外,车道数较多的道路(例如,双黄实线车道数大于4的道路)也可以视为双线路网,本…

appium自动化测试报错。

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

sip-URI的基本结构

sip-URI(sip Uniform Resource Identifier:会话初始协议统一资源标识符)的一般格式: sip:[userinfo]host[:port][;transporttcp|udp|tls|sctp][?parameters] sip: 协议标识符,表示这是一个SIP URI。userinfo&#x…

智慧煤矿:AI视频智能监管解决方案引领行业新变革

随着科技的飞速发展,人工智能(AI)技术已经渗透到各个行业,为传统产业的转型升级提供了强大的动力。在煤矿行业中,安全监管一直是一个重要的议题。为了提高煤矿的安全生产水平,降低事故发生率,智…

pytorch学习(八)Dataset加载分类数据集

我们之前用torchvision加载了pytorch的网络数据集,现在我们用Dataset加载自己的数据集,并且使用DataLoader做成训练数据集。 图像是从网上下载的,网址是 点这里,标签是图像文件夹名字。下载完成后作为自己的数据集。 1.加载自己…

基于纹理和统计图像特征集成的计算机辅助乳腺癌检测

诊断通常使用组织病理学切片,可以确定组织是否处于导管原位癌(DCIS)阶段,其中癌细胞尚未扩散到周围乳腺组织,或浸润性导管癌(IDC)阶段,其中细胞已渗透到邻近组织。对于医生来说,检测IDC非常耗时且具有挑战性。因此&…

搜集日志。

logstash 负责: 接收数据 input — 解析过滤并转换数据 filter(此插件可选) — 输出数据 output input — decode — filter — encode — output elasticsearch 查询和保存数据 Elasticsearch 去中心化集群 Data node 消耗大量 CPU、内存和 I/O 资源 分担一部分…

分布式搜索引擎ES-elasticsearch入门

1.分布式搜索引擎:luceneVS Solr VS Elasticsearch 什么是分布式搜索引擎 搜索引擎:数据源:数据库或者爬虫资源 分布式存储与搜索:多个节点组成的服务,提高扩展性(扩展成集群) 使用搜索引擎为搜索提供服务。可以从海量…

Linux下docker快速安装gitea

之前在服务器上装的gitlab来管理个人项目,但是gitlab服务启动后能明显感受到占用资源比较严重。最近服务器到期,换了个服务器还没来得及装gitlab,刚好最近接触到gitea,网上是这么说的 占用资源少,适合个人开发者&…

【数据结构】:时间和空间复杂度在这篇里面一点都不复杂

目录 如何衡量一个代码的好坏 时间复杂度 概念 计算方法 实例计算 【实例1】 【实例2】 【实例3】 【实例4】:冒泡排序的时间复杂度 【实例5】:二分查找的时间复杂度 【实例6】:阶乘递归的时间复杂度 【实例7】:斐波那契…

P3-AI产品经理-九五小庞

AI产品的数据流向 美团外卖,实时只能调度 美团28分钟送达需求的分析 AI产品常用的算法 常用算法 常见的AI算法解析 自然语言生成NLG语音识别:科大讯飞,通义千问 虚拟现实机器学习平台 决策管理系统生物特征识别技术 RPA(机器人流程自动…

百日筑基第二十五天-java开发程序员常犯的错总结

百日筑基第二十五天-java开发程序员常犯的错 一、将数组转换为ArrayList 要将数组转换为ArrayList&#xff0c;开发人员通常会这样做&#xff1a; List<String> list Arrays.asList(arr);**Arrays.asList()将返回 ArrayList私有静态类的 Arrays&#xff0c;而不是 ja…

《数据结构:栈和队列》

文章目录 一、栈1、概念与结构 二、栈的实现1、栈的结构和功能2、初始化栈3、入栈4、出栈5、判断栈是否为空6、取栈元素和栈有效个数7、销毁栈 三、队列1、概念与结构 四、队列的实现1、队列的实现结构和功能2、队列初始化3、入队列4、判断队列是否为空5、出队列6、取队头/队尾…

WPF+Mvvm 项目入门完整教程(一)

WPF+Mvvm 入门完整教程一 创建项目MvvmLight框架安装完善整个项目的目录结构创建自定义的字体资源下载更新和使用字体资源创建项目 打开VS2022,点击创建新项目,选择**WPF应用(.NET Framework)** 创建一个名称为 CommonProject_DeskTop 的项目,如下图所示:MvvmLight框架安装…

C++基础语法:STL之容器(5)--序列容器中的list(二)

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 序列容器的学习.以<C Prime Plus> 6th Edition(以下称"本书")内容理解 本书中容器内容不多只有几页.最好是有数据结构方面的知识积累,如果没有在学的同时补上 接上一篇C基础语法:STL之容器…

自己用vps起网页(用于测试题目回显)

0x01 首先要有一台vps&#xff0c;这里我推荐dk盾 base64 UVGkGjcyNzA3NzA1NQ0x02 那么我们就可以进行环境的配置了 我是选择的nginx&#xff0c;因为挺好用的吧&#xff0c;各方面参数也还行 我是使用的Ubuntu 的vps所以下面的命令也只有Ubuntu可以使用sudo apt updatesu…

<Rust>egui部件学习:如何在egui窗口中添加按钮button以及标签label部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析&#xff0c;主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统&#xff1a;windows 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;egui、eframe 概述 本文是本专栏的第二篇博…

15. 【C++】详解搜索二叉树 | KV模型

目录 1.定义 初始化 插入 查找 删除 完整代码 2.运用 K 模型和 KV 模型详解 K 模型 KV 模型 代码解释 为了更好地理解 map 和 set 的特性&#xff0c;和后面讲解查找效率极高的平衡搜索二叉树&#xff0c;和红黑树去实现模拟&#xff0c;所以决定在这里对搜索二叉树…