Chinaunix首页 | 论坛 | 博客
  • 博客访问: 206851
  • 博文数量: 38
  • 博客积分: 2060
  • 博客等级: 大尉
  • 技术积分: 388
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-17 10:10
文章分类

全部博文(38)

文章存档

2011年(1)

2009年(37)

我的朋友

分类: LINUX

2009-07-17 20:19:56

适用在select版的server上.

1、为何要采用非阻塞的accept?

考虑如下情况,当客户在完成三次握手后,发送一个RST给服务端,如果RST到达服务端时,服务端还没有调用accept(这完全可能的,尤其在繁忙的服务器上,因为在select和accept之间完全可能还有其他代码,并且含有cpu的调度)。此时服务端TCP在收到RST后,源于berkeley的实现会在内核处理该事件,将该连接从已经建立好的连接队伍出删除,并不会通知服务端。而其他的实现则会返回ECONNABORTED或则EPROTO错误。考虑一个基于berkeley的系统,accept被调用,假定没有其他建立好的连接,此时accept被阻塞,srver被挂起,要一直到下一个连接到来才返回。

阅读(1445) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~