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

select 的writeset不懂。

    来源: 互联网  发布时间:2016-02-18

    本文导语:  网络编程select函数的第三个参数有点不懂,请大家解释以下。 select的第三个参数是 侦听对写事件感兴趣的fd集合。 什么情况下写事件集合中的fd被置?书上说是在内核中的发送缓冲区中有数据时,就表示可写,但还...

网络编程select函数的第三个参数有点不懂,请大家解释以下。
select的第三个参数是 侦听对写事件感兴趣的fd集合。 什么情况下写事件集合中的fd被置?书上说是在内核中的发送缓冲区中有数据时,就表示可写,但还是不明白。
一般对写事件的操作如下
ioctl(fd, FIONBIO, 1);//设置为非阻塞。
FD_SET(fd, &writeset);
ret = select(maxfd+1, &readset, &writeset, NULL, NULL);
if(ret > 0)
{
    if(FD_ISSET(fd, &writeset))
    {
       send(fd, buf, strlen(buf), 0);//之前没有调用过send函数
    }
}

我不解的是,如果在select之没调用send函数,select怎么知道fd的写已被置1,如果fd不置1,FD_ISSET就返回0,那么send函数就没法调用。 我知道这里的buf不是指内核中的发送缓冲区,但还是想不同其中的原由。好像见到的程序都是这么写的。

请大家解释以下。

|
在Linux下是否可写是由设备驱动完全决定的,就算你不调用send或者write,writeset也可能是置位的。其实,大多数设备都是置位的。大多数设备驱动根据设备情况和缓冲情况返回POLLOUT,导致writeset返回1。windows的语意是输出直到写入部分数据才等待。所以,在Linux下,异步写需要格外的小心,否则会导致select失效,cpu占用率过高。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selected定义及介绍
  • 究竟怎么样取得的<select name="select_user" size="8" multiple>值
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selectable定义及介绍
  • man select 结果返回 No manual entry for select
  • java命名空间javax.swing.tree类defaulttreeselectionmodel的类成员方法: selection定义及介绍
  • select <0时调用exit(0),为什么程序没有退出,而是继续执行select了?
  • java命名空间javax.swing.tree类defaulttreecellrenderer的类成员方法: selected定义及介绍
  • insert into select和select into的使用和区别介绍
  • java命名空间java.awt.event类itemevent的类成员方法: selected定义及介绍
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • java命名空间javax.swing类defaultbuttonmodel的类成员方法: selected定义及介绍
  • HTML标签参考手册 iis7站长之家
  • java命名空间javax.swing.text.html类html.tag的类成员方法: select定义及介绍
  • sql代码:select database select all table
  • java命名空间javax.swing.text.html类html.attribute的类成员方法: selected定义及介绍
  • Oracle中select 1和select *的区别
  • java命名空间javax.swing.plaf.synth接口synthconstants的类成员方法: selected定义及介绍
  • jquery下拉select控件操作方法分享(jquery操作select)
  • java命名空间javax.sound.midi类shortmessage的类成员方法: song_select定义及介绍
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
  • java命名空间javax.swing类jfilechooser的类成员方法: cancel_selection定义及介绍
  • select into 和 insert into select 两种表复制语句


  • 站内导航:


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

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

    浙ICP备11055608号-3