免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: luokeleee
打印 上一主题 下一主题

请教socket编程里的select知识 [复制链接]

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
11 [报告]
发表于 2010-07-14 09:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
12 [报告]
发表于 2010-07-14 09:04 |只看该作者
回复 9# rain_fish


    不好意思啊,有个问题还想请教下您:在select用于服务端的时候,开始select的集合里存放的是服务端listen的socket吗?当有客户端的socket有链接请求时,您的意思是服务端的socket会可读吗,谢谢。

论坛徽章:
0
13 [报告]
发表于 2010-07-14 09:13 |只看该作者
是的

论坛徽章:
0
14 [报告]
发表于 2010-07-14 09:13 |只看该作者
回复 11# c/unix


    十分的感谢您的回复,我明白了好多的东西,我自己也找了些select的资料,但是介绍的都不详细,谢谢您啊,我终于明白select的过程了。
   想再向您请教一个问题:判断fd1、fd2。。。是否可读的判断依据是什么呢?小弟是个菜鸟,问的问题可能有点不对路子,请您多见谅啊,再次对您select过程的回复表示感谢,谢谢您!

论坛徽章:
0
15 [报告]
发表于 2010-07-14 09:14 |只看该作者
回复  rain_fish


    不好意思啊,有个问题还想请教下您:在select用于服务端的时候,开始select的集 ...
luokeleee 发表于 2010-07-14 09:04



    其实你应该在网上搜索一下,select的简单使用代码,都能解决你现在迷惑的地方。。。

论坛徽章:
0
16 [报告]
发表于 2010-07-14 09:14 |只看该作者
回复 13# rain_fish


    谢谢您。

论坛徽章:
0
17 [报告]
发表于 2010-07-14 09:14 |只看该作者
回复  rain_fish


    谢谢您。
luokeleee 发表于 2010-07-14 09:14



    客气了。。

论坛徽章:
0
18 [报告]
发表于 2010-07-14 09:19 |只看该作者
回复 17# rain_fish


    小弟是个不折不扣的菜鸟,上个月刚刚学习C语言,现在开始学网络编程。说实话,有点抵触的心理,因为自己的底子薄,看到好长的代码就害怕,我这就去找下select的实现代码,好好的看看,谢谢您的建议!  并感谢您的帮助,谢谢O(∩_∩)O~

论坛徽章:
0
19 [报告]
发表于 2010-07-14 09:25 |只看该作者
回复  rain_fish


    小弟是个不折不扣的菜鸟,上个月刚刚学习C语言,现在开始学网络编程。说实话,有 ...
luokeleee 发表于 2010-07-14 09:19



    学习进度这么快,你已经很厉害了,学习都是一点一点的积累的,不要太着急,祝你成功!

论坛徽章:
0
20 [报告]
发表于 2010-07-14 09:43 |只看该作者
一、winsock中
#include <winsock.h>

原型

intselect(
intnfds,
fd_set*readfds,
fd_set*writefds,
fd_set*exceptfds,
const struct timeval*timeout
);

nfds:本参数忽略,仅起到兼容作用。
   readfds:(可选)指针,指向一组等待可读性检查的套接口。
   writefds:(可选)指针,指向一组等待可写性检查的套接口。
   exceptfds:(可选)指针,指向一组等待错误检查的套接口。
   timeout:select()最多等待时间,对阻塞操作则为NULL。

注释:
   本函数用于确定一个或多个套接口的状态。对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息。用fd_set结构来表示一组等待检查的套接口。在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。有一组宏可用于对fd_set的操作,这些宏与Berkeley Unix软件中的兼容,但内部的表达是完全不同的。
   readfds参数标识等待可读性检查的套接口。如果该套接口正处于监听listen()状态,则若有连接请求到达,该套接口便被标识为可读,这样一个accept()调用保证可以无阻塞完成。对其他套接口而言,可读性意味着有排队数据供读取。或者对于SOCK_STREAM类型套接口来说,相对于该套接口的虚套接口已关闭,于是recv()或recvfrom()操作均能无阻塞完成。如果虚电路被“优雅地”中止,则recv()不读取数据立即返回;如果虚电路被强制复位,则recv()将以WSAECONNRESET错误立即返回。如果SO_OOBINLINE选项被设置,则将检查带外数据是否存在(参见setsockopt())。
   writefds参数标识等待可写性检查的套接口。如果一个套接口正在connect()连接(非阻塞),可写性意味着连接顺利建立。如果套接口并未处于connect()调用中,可写性意味着send()和sendto()调用将无阻塞完成。〔但并未指出这个保证在多长时间内有效,特别是在多线程环境中〕。
   exceptfds参数标识等待带外数据存在性或意味错误条件检查的套接口。请注意如果设置了SO_OOBINLINE选项为假FALSE,则只能用这种方法来检查带外数据的存在与否。对于SO_STREAM类型套接口,远端造成的连接中止和KEEPALIVE错误都将被作为意味出错。如果套接口正在进行连接connect()(非阻塞方式),则连接试图的失败将会表现在exceptfds参数中。


详细出处参考:http://www.itqun.net/content-detail/70767.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP