int select( int amxfdp1 , fd_set* readset ,fd_set * writeset ,fd_set *exceptset , const struct timeval *timeout)
对于要测试的socket是不是每进行一次select前都要进行FD_SET操作,来设置函数中的writeset及readset?
网上搜索到的一些有关select函数的用法注意事项:
这两天改掉了若干bug,都是关于select的使用
1,一个服务器程序,在select等待期间,会由于一个错误连接造成混乱,查来查去原来是没有在处理掉失败连接的时候将此文件描述符从等待集合中去除,在加了一句FD_CLR之后,程序恢复正常工作。
2,仍然是在select等待期间,有信号发生,之后select的工作就不再正确,原来是在信号处理函数中断select之后,select返回EINTR错误,程序必须处理掉这一错误。
3,select可以不必无限期等待,在最后一个参数中制定等待的时间即可,但这一时间在select返回时会被修改,因此当循环使用select时必须反复给时间变量赋值
对于要测试的socket是不是每进行一次select前都要进行FD_SET操作,来设置函数中的writeset及readset?
网上搜索到的一些有关select函数的用法注意事项:
这两天改掉了若干bug,都是关于select的使用
1,一个服务器程序,在select等待期间,会由于一个错误连接造成混乱,查来查去原来是没有在处理掉失败连接的时候将此文件描述符从等待集合中去除,在加了一句FD_CLR之后,程序恢复正常工作。
2,仍然是在select等待期间,有信号发生,之后select的工作就不再正确,原来是在信号处理函数中断select之后,select返回EINTR错误,程序必须处理掉这一错误。
3,select可以不必无限期等待,在最后一个参数中制定等待的时间即可,但这一时间在select返回时会被修改,因此当循环使用select时必须反复给时间变量赋值