当前位置:  技术问答>linux和unix

使用非阻塞式IO接收客户数据?

    来源: 互联网  发布时间:2015-03-26

    本文导语:  我在进行网络编程的时候,遇到一个困惑的问题。 我在一个主循环里面使用非阻塞IO,等待客户连接。accept返回后,创建一个新的进程用来处理这个客户的请求。代码如下(删了很多): .... while(1) { select(....); recv(.....

我在进行网络编程的时候,遇到一个困惑的问题。
我在一个主循环里面使用非阻塞IO,等待客户连接。accept返回后,创建一个新的进程用来处理这个客户的请求。代码如下(删了很多):
....
while(1)
{
select(....);

recv(....)
}
....

我的问题是在非阻塞IO的情况下,我的新进程的循环在运行到select函数时,是否会在没有数据来的时候阻塞呢?如果不会,那么循环就会不断的运行,这样会很耗CPU,这个时候大家是如何解决的呢?

|
在select中设置读写文件描述符(socket)或设置超时。

|
我也是刚学Linux,不过在看过北邮出版社的那本《linux网络编程》后对此有点了解。我觉得select的特殊意义就在于它是类似于中断的方法,自己挂起(直到超时),如果在期间数据来到并符合自己摄制的条件,Linux内核会将你的这个进程唤醒,这样你的进程不会不断运行,(除非来了很多数据)用select函数的意义就在于此,建议你去看看那本书的这部分,作者对socket编程进行了编类,并对每一种类进行了使用级别的原理介绍。
Good Luck!

|
我的问题是在非阻塞IO的情况下,我的新进程的循环在运行到select函数时,是否会在没有数据来的时候阻塞呢?如果不会,那么循环就会不断的运行,这样会很耗CPU,这个时候大家是如何解决的呢?

man select
在select的读写描述字集中添加描述字,如果没有可读、写的描述字,会阻塞的。

|
会不会阻塞要看你SELECT的参数,如果你设置了超时参数,就会在有事件的时候返回,否则要等到超时。另外,你用专门的进程处理一个连接,为什么怕阻塞呢?

    
 
 

您可能感兴趣的文章:

  • Select() 是否只能在非阻塞IO里使用,在阻塞IO里可以使用吗?
  • 请问使用TCP/IP时,服务器阻塞的问题。(在线讨论)!!
  • 非阻塞socket该如何使用。。。
  • 论坛 iis7站长之家
  • 如何使用shell脚本实现监控程序消息队列阻塞情况?
  • Linux网络抓包的程序 [使用recvfrom之后无限阻塞]
  • 使用TCP,在客户端怎么知道建立好的连接已经断开?怎么用非阻塞模式,以及怎么知道socket已经收到数据并立即将数据读出?
  • java线程阻塞中断与LockSupport使用介绍
  • 怎么使用outlook一类的客户端接收远程linux的系统邮件
  • Debian 使用Cacti SNMPD按照官方配置以后服务端接收不到数据 NO SUCH OID?
  • Android中BroadcastReceiver(异步接收广播Intent)的使用
  • 使用PYTHON接收多播数据的代码
  • c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎样在服务器端判断客户使用的浏览器是使用的简体中文的还是英文的还是日文的或者其他的?
  • 服务器端的共享内存可否被远程客户端的进程所挂载使用?
  • 客户端服务端使用socket通信的send/write最大发送多少?
  • 如何获取客户端浏览器所使用的语言,特别是要区分简繁体!
  • 可不可以在程序中直接使用ftp客户端的函数实现文件传输?
  • OpenVPN客户端的使用问题
  • Linux系统做服务器,客户端可使用windows系列的系统吗
  • 使用tcp协议发送数据, 如果获得系统底层将包发到客户端之间的耗时?
  • 如何使用LINUX为不同子网的WIN98客户端不同的应用程序做代理?给分100
  • 如何在java 客户端使用http将cookies 信息发送给服务端.
  • linux客户端能不能使用x界面呀
  • 使用 epoll或poll ,如何确定 与客户端的链接断开 ?
  • 在linux服务器上面设置squid后怎么设置可以使客户端能使用QQ?
  • 客户端如果不使用多线程可以实现收发同时进行吗?
  • 哪里可以下载到, Windows平台下的图形化CVS客户端软件?哪种使用更方便些?
  • 请问如何使用c++开发数据库客户端程序?
  • 为什么我装了RedHat Linux 9.0不能在客户端使用telnet?
  • 使用jsp中url跳转时,怎样让它变成乱码使客户端看不到?
  • bind函数客户端使用疑问?求解
  • 如何在redhat linux用小区宽带上网,如何配置,在windows中使用电信的客户端程序来上的
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3