当前位置: 首页 > news >正文

佛山网站建设是哪个好上海疫情又要爆发了

佛山网站建设是哪个好,上海疫情又要爆发了,建筑工程类人才招聘,中国纪检监察报社级别非阻塞connect()和accept() 一.select()函数 select()函数准备好读的条件: 1>.套接口有数据可读 2>.该连接的读这一半关闭(也就是接收了FIN的TCP连接)。对这样的套接口进行读操作将不阻塞并返回0(也就是返回EOF&am…

 

 

非阻塞connect()和accept()

 

 

一.select()函数
    select()函数准备好读的条件:
    1>.套接口有数据可读
    2>.该连接的读这一半关闭(也就是接收了FIN的TCP连接)。对这样的套接口进行读操作将不阻塞并返回0(也就是返回EOF)。
    3>.该套接口是一个侦听套接口且已完成的连接数不为0。
    4>.其上有一个套接口错误待处理,对这样的套接口的读操作将不阻塞并返回-1,并设置errno,可以通过设置SO_ERROR选项调用getsockopt函数获得。

    select()函数准备好写的条件:
    1>.套接口有可用于写的空间。
    2>.该连接的写这一半关闭,对这样的套接口进行写操作将产生SIGPIPE信号。
    3>.该套接口使用非阻塞的方式connect建立连接,并且连接已经异步建立,或则connect已经以失败告终。
    4>.其上有一个套接口错误待处理。

 

 

二.accept()函数

1.阻塞模式

阻塞模式下调用accept()函数,而且没有新连接时,进程会进入睡眠状态。

 

2.非阻塞模式

非阻塞模式下调用accept()函数,而且没有新连接时,将返回EWOULDBLOCK错误。

 

非阻塞模式select() + accept() 

 

sockfd = listen_tcp(); //socket()、bind()、listen()

FD_SET(sockfd, rset);

while(1){

ret = select(sockfd + 1, rset, NULL, NULL, timeout); // 等待某个事件发生:或是新连接、或是数据、或是FIN、或是RST到达

if(select()返回TIMEOUT){ //select()超时

printf("日志打印");

sleep(1);

continue;

}

else if(FD_ISSET(sockfd,&rset)){   //判断句柄是否可读,返回真代表可读,可读代表有新连接。

connfd = accept(sockfd, ...);

}

else if(select()返回错误){

return -1;

}

 

pthread_create(thread_recv_data, connfd, ...); // 创建线程处理新连接.

close();

}

 

三.connect()函数

1.阻塞模式

客户端调用connect()函数将激发TCP的三路握手过程,但仅在连接建立成功或出错时才返回。返回的错误可能有以下几种情况:

    1>.如果TCP客户端没有接收到SYN分节的响应,则返回ETIMEDOUT,阻塞模式的超时时间在75秒(4.4BSD内核)到几分钟之间。

    2>.如果对客户的SYN的响应时RST,则表明该服务器主机在我们指定的端口上没有进程在等待与之连接(例如服务器进程也许没有启动),这称为硬错,客

 

户一接收到RST,马上就返回错误ECONNREFUSED.

    3>.如果某客户发出的SYN在中间的路由器上引发了一个目的地不可达ICMP错误,多次尝试发送失败后返回错误号为EHOSTUNREACH或ENETUNREACH.

 

附加:产生RST的三种情况,一是SYN到达某端口但此端口上没有正在侦听的服务器、二是TCP想取消一个已有连接、三是TCP接收了一个根本不存在的连接上的

 

分节。

 

2.非阻塞工作模式

调用connect()函数会立刻返回EINPROCESS错误,但TCP通信的三路握手过程正在进行,所以可以使用select函数来检查这个连接是否建立成功。

    源自Berkeley的实现有两条与select函数和非阻塞相关的规则:

1>.当连接成功建立时,描述字变成可写。

2>.当连接建立出错时,描述字变成即可读又可写。getsockopt()函数的errno == 0表示只可写。

 

非阻塞模式 select() + connect()

 

 

while(1){

ret = connect();

if(errno == EINPROCESS){ //此时TCP的三路握手继续进行

select(...) //等待某个事件发生:或是新连接、或是超时

if(FD_ISSET(sockfd,&wset) ){ //判断句柄可写,不能代表建立连接成功。

getsockopt(...);

if(errno == 0){  //建立连接成功

 

}

}

else if(select()返回TIMEOUT){

sleep(1);

continue();

}

}

else if(ret == -1){

//Connect  failed

}

 

pthread_create(thread_send_log, ...); //建立线程处理新连接

close();

}

 

 

http://www.lbrq.cn/news/2634643.html

相关文章:

  • 最近做国际网站怎么样免费建立个人网站
  • 哪些网站做面试题seo站长优化工具
  • 做淘推广的网站上海百度推广
  • asp与java做网站效果今天国内最新消息
  • 报名网站如何做优化优化
  • 建设网站的价值全国最新疫情最新消息
  • 猪八戒网站做推广靠谱百度推广登录账号首页
  • 如何做漂亮的网站首页建网站软件工具
  • crm管理是什么意思厦门关键词排名seo
  • 网站脚本怎么做站长查询域名
  • qq赞网站推广免费百度软件商店
  • 专业商城网站建设报价免费外网加速器
  • 常州城乡建设学校网站优化营商环境条例心得体会
  • 钦州建设网站免费加客源
  • ps软件免费seo教育
  • 深圳加盟网站建设seo工作职责
  • 自己建的网站可以用笔记本做服务器吗站长工具站长之家官网
  • 做网站用虚拟机还是服务器seo赚钱培训课程
  • 我的网站为什么广州百度网站推广
  • wordpress请求汤阴县seo快速排名有哪家好
  • 郑州专业的网站建设公司哪家好什么是seo什么是sem
  • mooc网站开发流程图全国疫情一览表
  • 在婚恋网站做翻译好吗重庆关键词seo排名
  • 网站首页跳出弹窗google入口
  • 淘宝客网站开发服务商怎么提交百度收录
  • 电子商务80gb的流量网站够用吗百度地图网页版
  • 天权网站建设优化设计七年级上册语文答案
  • 重庆政府网站建设磁力猫torrent kitty
  • 自己做代购网站公司建设网站哪家好
  • 福田网站建设设计百度热搜榜排行
  • DM8数据库服务正常,但是登录报错 [-70019]:没有匹配的可登录服务器
  • 【驱动】RK3576-Debian系统使用ping报错:socket operation not permitted
  • OpenAI 开源模型 GPT-OSS深度拆解:从1170亿参数到单卡部署,重构AI开源生态
  • 2025 最新 ECharts 下载、安装与配置教程
  • Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水线
  • 组织架构与软件架构协同演进实践指南