[muduo网络库]——muduo库Socket类(剖析muduo网络库核心部分、设计思想)

2024-05-12 14:52

本文主要是介绍[muduo网络库]——muduo库Socket类(剖析muduo网络库核心部分、设计思想),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接着之前我们[muduo网络库]——muduo库Acceptor类(剖析muduo网络库核心部分、设计思想),我们接下来继续看muduo库中的Socket类。

Socket类

Socket类实际上就是封装socket fd。

重要成员变量

const  int sockfd_;
  • 因为Socket类实际上就是封装socket fd,所以成员变量也很简单,只有sockfd_

重要成员方法

  • 绑定bindAddress
void Socket::bindAddress(const InetAddress &localaddr)
{if(0 != ::bind(sockfd_,(sockaddr*)localaddr.getSockAddr(),sizeof(sockaddr_in))){LOG_FATAL("bind sockfd:%d fail\n",sockfd_);}
}

调用系统底层的bind来绑定服务器IP端口

  • 监听listen()
void Socket::listen()
{if (0 != ::listen(sockfd_,1024)){LOG_FATAL("listen sockfd:%d fail\n",sockfd_);}
}

调用系统底层的listen来监听套接字

  • 接受连接accept
int Socket::accept(InetAddress *peeraddr)
{sockaddr_in addr;socklen_t len = sizeof addr;bzero(&addr,sizeof addr);int connfd = ::accept4(sockfd_,(sockaddr*)&addr,&len, SOCK_NONBLOCK | SOCK_CLOEXEC);if(connfd >= 0){peeraddr->setSockAddr(addr); //把客户端地址传出去}return connfd;
}

调用系统底层的accept来接受新客户的连接请求,那么其返回值是由内核自动生成的一个全新的描述字connfd ,代表与返回客户的TCP连接。

  • 关闭写端
void Socket::shutdowmWrite()
{if(::shutdown(sockfd_,SHUT_WR) < 0){LOG_ERROR("shutdownWrite errpr");}
}

调用系统底层的shutdown关闭服务端的写通道。

  • 设置socket选项
void setTcpNoDelay(bool on);void setReuseAddr(bool on);  void setReusePort(bool on);  void setKeepAlive(bool on);

1)setTcpNoDelay禁用 Nagle 算法,避免连续发包出现延迟,这对编写低延迟网络服务很重要
2)SOL_SOCKET 是协议级别,表示我们正在设置套接字级的选。SO_REUSEADDR 设置了一个套接字的地址复用选项。用于允许套接字在关闭后立即重新使用其地址。这在进行服务器编程时特别有用,因为在服务器重启或关闭后,它通常需要立即重新绑定到相同的地址和端口。
3)SO_REUSEPORT 设置了一个套接字的端口复用选项。用于允许多个套接字绑定到同一个端口上。
4)SO_KEEPALIVE 用于启用或禁用 “Keep-Alive” 功能。启用这个功能后,如果套接字在一段时间内没有活动,操作系统会发送一个数据包来检查连接是否仍然有效。

代码地址:https://github.com/Cheeron955/mymuduo/tree/master

好了~ 有关于muduo库的Socket类的细节就到此结束了,Socket还是比较简单,容易理解的。接下来我们会介绍muduo库Buffer类,我们下一节见~~

这篇关于[muduo网络库]——muduo库Socket类(剖析muduo网络库核心部分、设计思想)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982931

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核