Linux-关于linux下select函数的使用
最近在做一个项目,需要一个服务器能同时为多个客户端服务,我们使用socket,同时,为了提高效率,服务器端也使用多线程的方式来为多个客户服务。
在网上找了很久,发现了一个select()的函数,然后我就想问一下,比如select(maxfd,&readfd,&writefd,NULL,NULL)
然后比如一个文件描述符fd读就绪后,函数返回,然后用FD_ISSET()来判断是不是读就绪,然后把数据读取进来,
然后,这时我想再向客户端发送数据,那这时候能直接用FD——ISSET()来判断是否可写吗?还是需要重新select()?如果用select的话,还得重新初始化FD_SET,再向里面填充文件描述符啊?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果没有其他线程在读写,那用FD_ISSET连续检查是可以的,最坏的情况就是fd实际可以被不阻塞写,而FD_ISSET告诉你会阻塞,要等下次select才能发送。
再次select时要重新设置文件描述符,因为select会修改传给它的fd_set。简单的做法是额外维护一个fd_set,重新初始化时用memcpy直接复制。
epoll效率比select高。