谈”句柄泄漏“_句柄泄漏/dev/ashmem72873bec-deaa-44e5-bb7a-ebf28cd356f-程序员宅基地

技术标签: leak  file  linux杂谈  linux  socket  windows  unix  

    “泄漏”是我们写程序的人老生常谈的一个话题。最为常见的就是内存泄漏(memory leak),本文介绍一种新的泄漏—句柄泄漏(handle leak)。在windows系统的程序中,我们经常会遇到句柄这个词,而且windows也抽象出了一种句柄类型HANDLE。在unix系统的系统中,句柄这个词用的不是很多。我们用另一个词描述它—文件描述符(file descriptior)。这里的文件是指广义的文件,因为在unix系统中,everything is a file。总的说来,句柄是指操作系统给我们的应用程序的进程分配的,用来标识某种资源的符号。这里的资源,可以是狭义的文件,可以是socket连接,也可以是一个对象。

    现在,这里以linux环境中的一个socket连接中的句柄泄漏的例子来说明句柄泄漏的情况:有三个应用程序A,B,C,它们运行在不同的机器上,它们之间通过socket接口进行通信。其中A和B之间通信,A是服务端;B是客户端,B和C之间通信,B是服务端,C是客户端。它们之间的通信都是TCP的。现在,B要给A发送数据,B在发送前,如果发现和A之间的连接断开,就会去重连,在重连的时候,B并没有close已经断开连接的socket id。这样,B重连A多次之后,操作系统分配给它的socket id都将会被用完。那么,现在C如果来连接B, 就会出现B拒绝C连接的情况,为什么会这样呢?因为B进程里面已经没有可用来标识该连接的socket id,所以B只能拒绝服务。

        上面就是一个socket句柄泄漏的例子。解决上面的问题的具体方法是:在B每次重连A的时候,调用系统提供的close()函数,把已经断开连接的socket的socket id释放。 举上面的例子,一方面是说明句柄泄漏的一种情况,另一方面,也是比较重要的方面,是让大家重视句柄的使用,能够正确使用句柄,一定要做到申请一个,就要时刻记得释放一个,要把申请和释放一一对应起来。就像内存使用中的malloc/free, new/delete一样,句柄的使用,申请和释放的api也要配对使用。

    不管是内存也好,还是句柄也好,都是可以统称为资源的,对资源的使用,要求都是统一的,就是要“有借有还,再借不难”。我们要谨记“文明”使用操作系统提供给我们的资源,力争写出更加“和谐”的程序来!


原创文章,转载请注明出处:小武哥的博客
本文固定链接:http://www.wuzesheng.com/?p=256

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feimataxue/article/details/7640570

智能推荐

ChemDraw Professional for Mac 16.0.1.4 专业的生物化学绘图软件_chemdraw professional 16.0 mac秘钥-程序员宅基地

文章浏览阅读1.8k次。ChemDraw Professional for Mac 是化学家和生物学家选择的完整绘图工具,它们可以创建可用于ELN,数据库和出版物以及查询化学数据库(现已包括SciFinder)的可发布出版物的科学智能图纸。ChemDraw Professional for Mac 16.0.1.4 下载ChemDraw Professional for Mac安装激活方法:1、下载完成后双击“ChemDraw Professional.dmg”打开磁盘映像;2、拖动“ChemDraw Profe_chemdraw professional 16.0 mac秘钥

java实现生成RSA公私钥、SHA256withRSA加密以及验证工具类_rsa-sha256 keylength java(1)-程序员宅基地

文章浏览阅读820次,点赞23次,收藏12次。(img-TnDAtgMb-1712498489201)]//这个根据需求填充SHA1WithRSA或SHA256WithRSA。//这个根据需求填充SHA1WithRSA或SHA256WithRSA。* 根据需要返回String或byte[]类型。* 通过私钥对参数进行加密。且后续会持续更新**

MFC 基础(实例)-程序员宅基地

文章浏览阅读78次。#include <windows.h>#include <stdio.h>LRESULT CALLBACK WinSunProc(//名字可以更改。参数类型不能变 HWND hwnd, // handle to window 窗口句柄 UINT uMsg, // message identifier WPARAM wParam, // first m..._mfc简单实例

Linux安装mariaDB详细步骤_linux 用rpm安装maria-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏20次。1.安装mariadbyum和源码编译安装的区别1.路径区别-yum安装的软件是他自定义的,源码安装的软件./configure --preifx=软件安装的绝对路径2.yum仓库的软件,版本可能比较低,而源码编译安装,版本可控3.编译安装的软件,支持第三方功能扩展./configure 这里可以加上很多参数,定制功能 yum仓库1.阿里云的yum仓库2.mysql官网,也会提供rpm包,源码包,以及yum源,供给下载 yum 安装文档 https://mariadb_linux 用rpm安装maria

自定义Drawable实现环形进度条._android使用layerdrawable实现自定义环形进度条-程序员宅基地

文章浏览阅读1k次。自定义Drawable实现环形进度条._android使用layerdrawable实现自定义环形进度条

授权认证(IdentityServer4)-程序员宅基地

文章浏览阅读30次。IdentityServer4+Vue+asp.netcore开源项目地址区别OpenId: Authentication :认证Oauth: Aurhorize :授权输入账号密码,QQ确认输入了正确的账号密码可以登录 --->认证下面需要勾选的复选框(获取昵称、头像、性别)----->授权  OpenID当你需要访问A网站的时候,A网站要求你输入你的OpenId,...

随便推点

《手把手教你》 mysql5.6.zip格式压缩版安装教程_mysql,.zip 安装教程-程序员宅基地

文章浏览阅读4.9w次,点赞40次,收藏115次。前言:MySQL是一个关系型数据库管理系统,官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。不过很多人都是下载的是zip格式的安装包,解压却发现没有setup.exe安装程序,所以今天我们介绍的是zip格式的安装教程。1.首先先下载mysql,进入这个网站https://dev.mysql.com/downloads/mysql/下载_mysql,.zip 安装教程

vulhub漏洞复现系列之Adobe ColdFusion(cve-2010-2861文件读取漏洞、CVE-2017-3066反序列化漏洞)_vulhub中cve20103863漏洞利用-程序员宅基地

文章浏览阅读886次。CVE-2010-2861)Adobe ColdFusion 文件读取漏洞一、漏洞简介Adobe ColdFusion 8、9版本中存在一处目录穿越漏洞,可导致未授权的用户读取服务器任意文件。二、漏洞影响Adobe ColdFusion 8Adobe ColdFusion 9三、漏洞复现直接访问http://www.0-sec.org:8500/CFIDE/administrator/enter.cfm?locale=…/…/…/…/…/…/…/…/…/…/etc/passwd%00en,即可_vulhub中cve20103863漏洞利用

应用层的poll 函数介绍_poll 上下层例子-程序员宅基地

文章浏览阅读1.1k次。poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:#include int poll(struct pollfd fds[], nfds_t nfds, int timeout);参数说明:fds:一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个_poll 上下层例子

计算机毕业设计springboot多媒体素材管理库w22wz9【附源码+数据库+部署+LW】-程序员宅基地

文章浏览阅读36次。选题背景:随着互联网的快速发展和智能设备的普及,多媒体素材的应用越来越广泛。无论是网页设计、移动应用开发还是数字媒体创作,都离不开丰富多样的多媒体素材。然而,随着素材数量的增加和管理的复杂性,传统的素材管理方式已经无法满足需求。因此,开发一个高效、便捷的多媒体素材管理库成为了迫切的需求。选题意义:提高工作效率:传统的多媒体素材管理方式往往需要人工进行分类、整理和搜索,耗费大量时间和精力。而通过开发一个多媒体素材管理库,可以实现自动化的分类、标签化和搜索功能,极大地提高工作效率。优化用户体验:多

使用Hutool的SystemTimer做延时消息处理_hutool systemtimer-程序员宅基地

文章浏览阅读1.5k次。使用Hutool的SystemTimer做延时消息处理_hutool systemtimer

2023年11月最新视频号下载提取工具?-程序员宅基地

文章浏览阅读399次。按照以上步骤进行操作,一般情况下,视频号下载提取器都能成功地提取视频号中的链接。值得注意的是,视频号提取工具可能会受到平台的影响,如果出现失效的情况,你可以关注"去水印提取下载"以获取备用视频下载助手。1. 首先,在微信客户端中搜索并添加"下载小助手儿"并关注获取推送的消息。然后添加视频下载助手为好友,可以帮助你解析视频号链接。4. 视频发送完成后,打开与"视频下载助手"的对话框,在其中寻找视频号小程序消息。2. 打开微信,并找到你想要提取链接的视频号。3. 在分享页面中,选择转发给好友"视频下载助手"。

推荐文章

热门文章

相关标签