select - I/O多路复用
使用select函数的套接字 如果你想保持现有连接的同时,侦听新的连接,怎么办呢? 普通的做法(使用recv, accept是做不到的)。当使用accetp等待新的连接时,程序是阻塞的,也就没办法再同原有连接保持通信。 另一种做法是,使用非阻塞方式,但这会浪费了宝贵的CPU时间(你的不停的轮询轮询)。 有没有更好的办法呢?答案是肯定的 – 使用select函数。 select可以帮助你同时监听多个套接字。它会告诉你哪个套接字读数据就绪, 哪个套接字写数据就绪,哪个套接字发生错误。 使用select意味着使用I/O多路技术。 select函数头文件: #include <sys/time.h> #include <sys/types.h> #include <unistd.h> select函数原型: int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 详细信息可查看 man select select()函数的参数说明: numfds 是readfds,writefds,exceptfds 中fd 集合中文件描述符中最大的数字加上1。 readfds 中的fd 集合将由select 来监视是否可以读取。 writefds