当前位置: 首页 > 编程日记 > 正文

对ListenSocket 的研究(四)

对postmaster.c 中的 readmask,rmask,nsocket等进行分析,可以看到:它们之间有如下的关系(与细节无关的代码省略):

复制代码
/*
* Initialise the masks for select() for the ports we are listening on.
* Return the number of sockets to listen on.
*/
static int
initMasks(fd_set *rmask)
{
int            maxsock = -1;
int            i;
FD_ZERO(rmask);
for (i = 0; i < MAXLISTEN; i++)
{
int fd = ListenSocket[i];
if (fd == PGINVALID_SOCKET)
break;
FD_SET(fd, rmask);
if (fd > maxsock)
maxsock = fd;
}
return maxsock + 1;
}
复制代码

复制代码
static int
ServerLoop(void)
{
......
nSockets = initMasks(&readmask);
for (;;)
{
fd_set        rmask;
int            selres;
/*
* Wait for a connection request to arrive.
* We wait at most one minute, to ensure that the other background
* tasks handled below get done even when no requests are arriving.
* If we are in PM_WAIT_DEAD_END state, then we don't want to accept
* any new connections, so we don't call select() at all; just sleep
* for a little bit with signals unblocked.
*/
memcpy((char *) &rmask, (char *) &readmask, sizeof(fd_set));
PG_SETMASK(&UnBlockSig);
if (pmState == PM_WAIT_DEAD_END)
{
...
}
else
{
...
selres = select(nSockets, &rmask, NULL, NULL, &timeout);
}
/*
* Block all signals until we wait again.  (This makes it safe for our
* signal handlers to do nontrivial work.)
*/
PG_SETMASK(&BlockSig);
/* Now check the select() result */
if (selres < 0)
{
...
}
/*
* New connection pending on any of our sockets? If so, fork a child
* process to deal with it.
*/
if (selres > 0)
{
...
}
...
}
}
复制代码
可以看出来,nsocket就是用于监听网络通信的地 fd_set中的文件描述符最大值+1。
至于原始的文件描述符,就是来自于 ListenSocket数组。
为了进一步研究,还需要从源头上看ListenSocket是如何被赋值的。







本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/07/20/2601081.html,如需转载请自行联系原作者

相关文章:

MySQL下的NoSQL解决方案HandlerSocket

目前使用MySQL的网站&#xff0c;多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行&#xff0c;有众多成功的案例&#xff0c;但过于依赖Memcache&#xff0c;无形中让Memcache成为故障的根源&#xff1a; Memcache数据一致性的问题&#xff1a;当MySQL数据变化后&a…

人群距离监测 DeepSOCIAL 最全汉化论文+源码导读

作者 |神经星星来源 |HyperAI超神经By 超神经内容一览&#xff1a;在疫情期间&#xff0c;公共场所中尽量避免人群聚集&#xff0c;可以有效控制疫情扩散。英国利兹大学的研究团队开源了 DeepSOCIAL 人群距离监测项目&#xff0c;通过 YOLOv4SORT 的方式快速实现了这一应用。关…

堆和栈的差别(转过无数次的文章)

一、预备知识—程序的内存分配 一个由C/C编译的程序占用的内存分为下面几个部分 1、栈区&#xff08;stack&#xff09;— 由编译器自己主动分配释放 &#xff0c;存放函数的參数值&#xff0c;局部变量的值等。其 操作方式相似于数据结构中的栈。 2、堆区&…

ARM WFI和WFE指令【转】

本文转载至&#xff1a;http://www.wowotech.net/armv8a_arch/wfe_wfi.html 1. 前言 蜗蜗很早以前就知道有WFI和WFE这两个指令存在&#xff0c;但一直似懂非懂。最近准备研究CPU idle framework&#xff0c;由于WFI是让CPU进入idle状态的一种方法&#xff0c;就下决心把它们弄清…

分享几个用 Python 给图片添加水印的方法,简单实用

作者 |俊欣来源 |关于数据分析与可视化今天来分享几种可以给图片添加水印的方法&#xff0c;都是十分的简单实用&#xff0c;大家在看了之后也可以私底下去自己试试&#xff0c;有些方法需要的代码量就比较少&#xff0c;有些方法需要的代码量就稍微多一些&#xff0c;那我们开…

Apache服务器下使用 ab 命令进行压力测试

ab是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能&#xff0c;主要是显示你安装的Apache每秒可以处理多少个请求. #ab -v可以看出其基本信息 #ab -n1000 -c10 http://localhost:81/t.php 这是一个基本命令 -n1000表示总请求数为…

《Objective-c》Foundation框架 -(字符串:NSString和NSMutableString)

一、NSString&#xff08;不可变字符串&#xff09; 1.创建字符串的方式&#xff1a;&#xff08;利用对象方法&#xff09; 方式一&#xff1a;最快速的创建 方式二&#xff1a; 方式三&#xff1a; 方式四&#xff1a; 方式五&#xff1a;NSUTF8StringEncoding 用到中文就可以…

基于Vue, Vuex 和 ElementUI 构建轻量单页Hexo主题Lite

Hexo Theme Lite Keep Calm, Lite and Writing.light single page blog application theme, using Vue, Vuex, ElementUI and so on. 一款轻量单页博客主题&#xff0c;基于Vue, Vuex 和 ElementUI 构建, 工具语言 Typescript Live Demo Demo | 在线演示 Github 项目地址 Previ…

怎么关闭wordpress评论

1、要是关闭某一篇文章的评论&#xff0c;在发表文章的时候&#xff0c;在下面有个“讨论”&#xff0c;把"允许评论"去掉勾选就可以了。 2、要是关闭所有文章的评论&#xff0c;在“设置”-“讨论设置”把“默认文章设置”中的“允许访客对新文章发表评论 ”不再勾…

ACM-ICPC历届世界总冠军名单1977-2015

为什么80%的码农都做不了架构师&#xff1f;>>> ‍‍‍‍‍‍ ACM-ICPC历届世界总冠军1977-2015 更新时间2016-04-20 17:39 年份总决赛地点冠军大学国家2015年摩洛哥马拉喀什‍‍‍‍聖彼得堡國立資訊科技、機械與光學大學 (破纪录解出全部题目)‍‍‍‍俄罗斯2014…

AI 盯上了外包司机,看后视镜就被扣分,奖金拜拜!

整理 | 梦依丹 来源 | CSDN 生活在科技领先时代的我们&#xff0c;每天无不被算法支配着&#xff0c;从衣食住行到工作中的决策参考。以前在电影中见到的AIer控制人类的场景&#xff0c;越来越现实化。 AI算法不断优化之下&#xff0c;有些企业直接通过AI来给员工打绩效&…

用 Handler 轻松实现专属Android定时器

今年在项目中发现为了实现倒计时、时间段的延迟执行、时间段的轮询执行任务&#xff0c;都是采用Handler postDelayed(runnable,delayMillis). 等等&#xff0c;这有毛病&#xff1f;那你将实现以上功能时、代码大概如下。 Handler handler new Handler()&#xff1b; int cou…

查看Firefox中的缓存

在firefox浏览器中可以在地址栏使用about:cache命令查看当前缓存。 Information about the Cache Service Disk cache device Number of entries:333Maximum storage size:458708 KiBStorage in use:3685 KiBCache Directory:C:\Documents and Settings\Administrator\Local …

技术大咖齐聚爱数智慧人机交互技术论坛 | CNCC2021

CNCC2021【人机交互技术的机遇与挑战】技术论坛将于2021年10月28日13:00-16:00在深圳国际会展中心CC105B召开&#xff0c;本次论坛由CCF主办&#xff0c;爱数智慧创始人兼CEO张晴晴担任论坛主席&#xff0c;邀请来自产学研各界技术大咖&#xff0c;就人机交互、智能语音技术的应…

响应式网页的布局设计

值得收藏的14款响应式前端开发框架 作为今年大热的设计趋势&#xff0c;响应式已然是设计师的标配技能。今天阿里的同学从响应式设计的布局类型、布局实现两方面深入讲解&#xff0c;有哪些实现布局的方式&#xff0c;该采用何种方式&#xff0c;都有相当专业细致的解答&#x…

halcon算子翻译——set_framegrabber_callback

名称 set_framegrabber_callback - 为图像采集设备注册一个回调函数。 用法 set_framegrabber_callback( : : AcqHandle, CallbackType, CallbackFunction, UserContext : ) 描述 算子set_framegrabber_callback为AcqHandle指定的图像采集设备注册一个回调函数。 参数CallbackF…

设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)

Sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项&#xff0c; 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。基于这点&#xff0c;sysctl(8) 提供两个功能&#xff1a;读取和…

AI 天气预报准确度高于气象台,一张 GPU 1秒预测未来 90 分钟天气

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 此次 DeepMind 聚焦天气预报这一重大挑战&#xff0c;与英国气象局合作将 AI 应用于预测降雨。 在天气现象中&#xff0c;雨尤其重要&#xff0c;因为它会影响我们的日常决策。 我应该带伞吗&#xff1…

33.搜索插件——autocomplete

搜索插件的功能是通过插件的autocomplete()方法与文本框相绑定&#xff0c;当文本框输入字符时&#xff0c;绑定后的插件将返回与字符相近的字符串提示选择&#xff0c;调用格式如下&#xff1a; $(textbox).autocomplete(urlData,[options]); 其中&#xff0c;textbox参数为文…

React Native开源项目如何运行(附一波开源项目)

学习任何技术&#xff0c;最快捷的方法就是学习完基础语法&#xff0c;然后模仿开源项目进行学习&#xff0c;React Native也不例外。React Native推出了1年多了&#xff0c; 开源项目太多了&#xff0c;我们以其中一个举例子.给大家演示下如何运行开源项目.(前提是你已经搭建好…

http header头设置反向代理不缓存

一&#xff1a;概念说明 Expries:网页的cache过期时间&#xff0c;到指定日期网页cache失效 Last-Modified:网页的最新更新时间 Cache-Control 缓存控制 no-cache:不缓存网页 no-store:不缓存网页&#xff0c;如果有则删除之 must-revalidate:使之前&#xff0c;服务器响应使用…

985大学的高材生只会写代码片段,丢人吗?

很多同学在学习编程的时候都会遇到各种各样的难题&#xff0c;比如&#xff1a;没有合适的资料、学习过于碎片化、资料的质量层次不齐、看了很多视频自己动手时却还是不会、接触不到完整项目、无法检测自己的编程水平是不是企业所认可的……最近&#xff0c;小郭和小解同学也遇…

xcode6 dyld_sim is not owned by root

如果运行复制过来的xcode可能会这个提示&#xff0c;xcode6 dyld_sim is not owned by root解决方法打开终端 输入sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

C语言关闭日志文件时忘了将日志文件全局变量指针置为NULL

C语言写了一个write_log函数以写日志&#xff0c;写了一个close_log_file函数以关闭日志&#xff0c;声明了一个日志文件全局变量文件指针plogFile。 write_log中首先判断plogFile是否为NULL&#xff0c;如果不为NULL&#xff0c;则直接引用plogFile写日志信息&#xff1b; 如果…

DeepMind 的新强化学习系统是迈向通用 AI 的一步吗?

作者 | Ben Dickson来源 | 数据实战派这篇文章是我们对 AI 研究论文评论的一部分&#xff0c;这是一系列探索人工智能最新发现的文章。对于已经精通围棋、星际争霸 2 和其他游戏的深度强化学习模型来说&#xff0c;人工智能系统的主要挑战之一是它们无法将其能力泛化到训练领域…

linux中iptables入门教程--设置静态防火墙

1、iptables介绍iptables是复杂的&#xff0c;它集成到linux内核中。用户通过iptables&#xff0c;可以对进出你的计算机的数据包进行过滤。通过iptables命令设置你的规则&#xff0c;来把守你的计算机网络──哪些数据允许通过&#xff0c;哪些不能通过&#xff0c;哪些通过的…

{好文备份}SQL索引一步到位

SQL索引一步到位&#xff08;此文章为“数据库性能优化二&#xff1a;数据库表优化”附属文章之一&#xff09; SQL索引在数据库优化中占有一个非常大的比例&#xff0c; 一个好的索引的设计&#xff0c;可以让你的效率提高几十甚至几百倍&#xff0c;在这里将带你一步步揭开他…

浅谈SQL Server中统计对于查询的影响

简介SQL Server查询分析器是基于开销的。通常来讲&#xff0c;查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引。而每次查询分析器寻找路径时&#xff0c;并不会每一次都去统计索引中包含的行数&#xff0c;值的范围等&#xff0c;而是根据一定条件创建…

《Effective C#中文版:改善C#程序的50种方法》读书笔记

一、用属性代替可访问的字段 1、.NET数据绑定只支持数据绑定&#xff0c;使用属性可以获得数据绑定的好处&#xff1b; 2、在属性的get和set访问器重可使用lock添加多线程的支持。 二、readonly&#xff08;运行时常量&#xff09;和const&#xff08;编译时常量&#xff09; …

100行代码,使用 Pygame 制作一个贪吃蛇小游戏!

作者 | 周萝卜来源 | 萝卜大杂烩相信我们大家都玩过贪吃蛇游戏&#xff0c;今天我们就从头一起来写一个贪吃蛇小游戏&#xff0c;只需要100多行的代码就完成了。用到的 Pygame 函数 贪吃蛇小游戏用到的函数功能描述init()初始化 pygamedisplay.set_mode()以元组或列表为参数创建…