关于select模型问题
每次用select去检测套接字集合中那些套接字有读和写的,当一个套接有过一次写操作后,以后每次都会检查该套接可以写,便会执行发送操作。但是读操作只有新的套接字连接和用户发送数据过来时,才会检测到,属于正常。请哪位大侠给我指点一番写操作为什么每次都会执行?
[解决办法]
select检测写套接字的意思是,检测是否可写。具体写不写,随你便。
[解决办法]
写和读的处理方式是不同的。
输入缓冲有数据的时候,才表明可以读(否则就会阻塞,或者返回error)
输出缓冲空的时候,就可以写。也就是说,一次写操作完成后,一直都是可写状态。
所以write的处理和read不一样,你应该自己维护每个socket可写状态标志。 每次对一个socket写了后(send/sendto),设为false,然后加入select检测,收到write后设写标志为true.
写之前要检测write标志,true的话就直接写,否则需要自己缓存下。
[解决办法]
是有些不一样,windows网络编程 有讲
[解决办法]
写操作是检测客户是否处于连接状态,你想写就写
读操作是客户发来数据则触发
[解决办法]
你可以建一个发送缓冲区,如果数据没有一次性发送完成,当select检查该socket为可写状态时将剩余的部分发送出去就可以了。在构建FDSET的时候,只有当发送缓冲区不为空的时候(TCP连接的时候)才将socket加入到write fdset中进行检查,其他时候没必要检查可写状态。