Linux下select的使用小记
<br />今天使用select编程,问题很多,以前真的没有仔细研究过。<br />出现了以下几个问题<br />1 recvfrom在接收时,提供给系统调用的最后一个参数,客户端的地址结构,其长度必须进行初始化,如果为0,则不能接收数据。<br />2 select的第一个参数为所有监视的文件描述符的最大值+1,而不是监视的文件描述符个数+1。<br />3 不要监视那些经常可用的文件描述符,如
·
今天使用select编程,问题很多,以前真的没有仔细研究过。
出现了以下几个问题
1 recvfrom在接收时,提供给系统调用的最后一个参数,客户端的地址结构,其长度必须进行初始化,如果为0,则不能接收数据。
2 select的第一个参数为所有监视的文件描述符的最大值+1,而不是监视的文件描述符个数+1。
3 不要监视那些经常可用的文件描述符,如果这样做,select会一直返回。
4 在select返回后,如果监视的文件描述符没有状态改变,则在fd_set中此文件描述符会被清0,因此在select的循环中,每次进入都要重新设置我们所关注的文件描述符。
5 如果select使用了超时操作,每次返回select都会修改计时器,将计时器设为余下的时间,因此如果使用了计时器,每次进入循环都要重置计时器。pselect没有这个毛病。
下面是linux下的基于select的一个UDP反射服务器的示例代码:
下面是一个python的UDP反射客户端
更多推荐
已为社区贡献2条内容
所有评论(0)