分享好友 最新动态首页 最新动态分类 切换频道
公司建设网站产生哪些费用/百度在线客服系统
2024-12-28 20:01


非阻塞 connect

公司建设网站产生哪些费用/百度在线客服系统

      在 TCP socket 被设置为非阻塞的情况下调用 connect ,若没有立即返回成功,则会返回 -1 以及 errno EINPROGRESS 的 错误,其表示连接操作正在进行中,但是尚未完成,与此同时 TCP 三次握手操作会同时进行。在这之后,我们可以通过调用 select 来检查这个链接是否建立成功。

非阻塞 connect 的三种用途
  • 可以在 TCP 三次握手的同时做一些其它的处理。connect 操作需要一个往返时间才能完成,从几个毫秒(局域网)到几百毫秒或几秒(广域网)。在这段时间内我们可能有一些其他的处理想要同时执行; 
  • 可以用这种技术同时建立多个连接。在 Web 浏览器中很普遍; 
  • 由于我们使用 select 来等待连接的完成,因此我们可以给 select 设置一个时间限制,从而缩短 connect 的超时时间。在大多数实现中,connect 的超时时间在 75 秒到几分钟 之间(linux 内核中对 connect 的超时限制是 75 秒)。有时候应用程序想要一个更短的超时时间,使用非阻塞 connect 就是一种方法。 

非阻塞 connect 听起来虽然简单,但是仍然有一些细节问题要处理
1.即使套接字是非阻塞的,如果连接的服务器在同一台主机上,那么在调用 connect 建立连接时,连接通常会立即建立成功。我们必须处理这种情况
2.源自 Berkeley 的实现有两条与 select 和非阻塞 I/O 相关的规则
    A) 当连接建立成功时,套接口描述符变成 可写 (连接建立时,写缓冲区空闲,所以可写
    B) 当连接建立出错时,套接口描述符变成 既可读又可写 (由于有未决的错误,从而可读又可写

注意:当一个套接口出错时,它会被 select 调用标记为既可读又可写。
非阻塞 connect 有这么多好处,但是处理非阻塞 connect 时会遇到很多【可移植性问题】。

处理非阻塞 connect 的步骤
第一步,创建 socket,返回套接字描述符
第二步,调用 fcntl 或 ioctlsocket 把套接口描述符设置成非阻塞
第三步,调用 connect 开始建立连接
第四步,判断连接是否成功建立
    A) 如果 connect 返回 0 ,表示连接成功(服务器和客户端在同一台机器上时就有可能发生这种情况
    B) 调用 select 来判定连接建立的是否成功
       如果 select 返回 0 ,则表示在 select 的超时时间内未能成功建立连接;我们需要返回超时错误给用户,同时关闭连接,以防止 TCP 三次握手继续进行下去
       如果 select 返回大于 0 的值,则说明检测到可读或可写或异常的套接字描述符存在;此时我们可以通过调用 getsockopt 来检测集合中的套接口上是否存在待处理的错误,如果连接建立是成功的,则通过 getsockopt(sockfd,SOL_SOCKET,SO_ERROR,(char *)&error,&len) 获取的 error 值将是 0 ,如果建立连接时遇到错误,则 error 的值是连接错误所对应的 errno 值,比如 ECONNREFUSED,ETIMEDOUT 等。

=============
      “读取套接口上的错误”是遇到的【第一个可移植性问题】:如果出现问题,getsockopt 源自 Berkeley 的实现是返回 0 ,等待处理的错误在变量 errno 中返回;但是 Solaris 会让 getsockopt 返回 -1 ,errno 置为待处理的错误。我们对这两种情况都要处理。

      这样,在处理非阻塞 connect 时,在不同的套接口实现的平台中存在的移植性问题。首先,有可能在调用 select 之前,连接就已经建立成功,而且对方的数据已经到来。在这种情况下,连接成功时套接口将既可读又可写,这和连接失败时是一样的。这个时候我们还得通过 getsockopt 来读取错误值。这是【第二个可移植性问题】。
=============

移植性问题总结
  1. 对于出错的套接口描述符,getsockopt 的返回值源自 Berkeley 的实现是返回 0 ,待处理的错误值存储在 errno 中;而源自 Solaris 的实现是返回 -1 ,待处理的错误存储在 errno 中。(套接口描述符出错时调用 getsockopt 的返回值不可移植) 
  2. 有可能在调用 select 之前,连接就已经建立成功,而且对方的数据已经到来,在这种情况下,套接口描述符是既可读又可写,这与套接口描述符出错时是一样的。(怎样判断连接是否建立成功的条件不可移植) 

这样的话,在我们判断连接是否建立成功的条件不唯一时,我们可以有以下的方法来解决这个问题
  1. 调用获取对端 socket 地址的 getpeername 代替 getsockopt 。如果调用 getpeername 失败,getpeername 返回 ENOTCONN ,表示连接建立失败,之后我们必须再以 SO_ERROR 调用 getsockopt 得到套接口描述符上的待处理错误; 
  2. 调用 read ,读取长度为 0 字节的数据。如果连接建立失败,则 read 会返回 -1 ,且相应的 errno 指明了连接失败的原因;如果连接建立成功,read 应该返回 0 。 
  3. 再调用一次 connect 。它应该失败,如果错误 errno 是 EISCONN ,就表示套接口已经建立,而且第一次连接是成功的;否则,连接就是失败的。 

被中断的 connect
       如果在一个阻塞式套接口上调用 connect ,在 TCP 的三次握手操作完成之前被中断了,比如说被捕获的信号中断,将会发生什么呢?假定 connect 不会自动重启,它将返回 EINTR 。那么这个时候,我们就不能再调用 connect 等待连接建立完成了,如果再次调用 connect 来等待连接建立完成的话,connect 将会返回错误值 EADDRINUSE 。在这种情况下,应该做的是调用 select ,就像在非阻塞式 connect 中所做的一样。然后 select 在连接建立成功(使套接口描述符可写)或连接建立失败(使套接口描述符既可读又可写)时返回。

===================


非阻塞socket调用connect, epoll和select检查连接情况示例


最新文章
谷歌账号注册购买,facebook个人号购买渠道
谷歌账号注册购买,facebook个人号购买渠道在当今社会,网络购物已经成为人们生活中bukehuoque的一部分。随着社交媒体的迅猛发展,人们也开始在社交平台上进行线上购物。谷歌账号和Facebook个人账号成为了很多人进行线上购买的主要渠道。在
电商平台接一条广告的费用是多少?
不同的广告类型有不同的费用,开屏广告,这类广告是根据CPT方式计费,CPT计费是按照投放时间购买来计算,可以任意选择时间段进行广告播放,在这一时间段不论广告播放多少次,都只收一次广告费用。但CPT计费方式,对预算成本要求较高,电商
【国家政务服务平台app电脑版下载2024】国家政务服务平台app PC端最新版「含模拟器」
国家政务服务平台app,一般又称中国政务服务app,国家政务服务平台客户端。国家政务服务平台,欢迎大家来申请国家政务服务平台健康码。
又一酒店卫浴龙头倒下,年产值曾达30亿
文 | 酒管财经近日,曾经的酒店卫浴领军企业、国内十大卫浴品牌之一的佛山市英洛贝斯卫浴有限公司(原为英皇卫浴)宣告破产清算,在业内引起轩然大波。据悉,英皇卫浴曾是香格里拉、喜来登等超五星级酒店的亚太合作伙伴,也曾是美豪酒店的
民生银行逾期分期36期怎么办理?
民生银行逾期分期36期小编导语在现代社会,个人和家庭的消费模式日益多样化,信用消费逐渐成为人们生活中不可或缺的一部分。民生银行作为中国领先的商业银行之一,推出了多种金融产品,以满足不同客户的需求。随着信用消费的普及,逾期还款
出海短剧系统快速搭建,可运营系统源码,支持上架app store市场
标题:轻松出海,一键——南阳迈特网络科技有限公司海外短剧,助您快速抢占市场先机正文:随着移动互联网的快速发展,海外对于求日益增长。在这个背景下,南阳迈特网络科技有限公司应运而生,推出了一款备受瞩目的产品——海外短剧系统。该
短剧出海系统全端开源,成品系统完整前后端源码.支持apple苹果内购支付
标题剧出海利!全端开源短剧,苹果内购支付轻松实现,免费搭建助您臂之力随着互联网的快速发展,短视频行业在全球范围内迅速崛起剧的形式,正逐渐成为市场的新宠。迈网络科技有限公司倾力,以其端免费搭建、支持内购支付等,短剧出海得助手
百度识图搜索设计_百度识图搜索结果设计教程
摘要:百度识图搜索设计,百度识图搜索结果设计教程,新片场素材小编卫晴百度识图搜索设计,百度识图搜索结果设计教程相关内容整理,如果您对百度识图搜索设计,百度识图搜索结果设计教程感兴趣欢迎访问免费阅读。百度识图搜索设计,百度识图搜
白银网络推广秘籍,搜索优化策略深度解析
白银网络推广策略全解析涵盖搜索引擎优化技巧,包括关键词研究、内容优化、链接建设、技术SEO等,旨在提升白银产品在网上的可见度和流量,从而增强品牌影响力和销售。随着互联网的飞速发展,已成为企业拓展市场、提升品牌知名度的重要手段
如何让美国消费者拥抱中国货?
美国,一直是很多企业出海的首选之地。今天的美国市场到底是什么样子?消费行为、用户身上有哪些新变化值得关注?当下火热的 TikTok 等兴趣电商平台、网红达人资源,企业要如何利用?美国线下商超门槛高在哪,如何突破?带着这些问题,36
相关文章
推荐文章
发表评论
0评