/dev/poll和kqueue都是类似于epoll的技术,解决select/poll的效率问题,分别是Solaries和FreeBSD的技术 。
Connect超时时间是由系统决定的,recv和send的超时可以 SO_RCVTIMEO and SO_SNDTIMEO 决定,select和epoll可以设置超时时间。当然这都是针对block的socket的。
用 fcntl 设置non block。那么accept,connect,read,write都是不会等待资源到位的,所以要先用select/epoll检查是否符合条件。这就是我以前程序对connect的socket在连接成功之后再设置成non block的解释。 要想设置conect的超时时间可以通过设置它为non blcok,connect如果返回EINPROGRESS就加上select(time)的方式实现,否则就是成功了。