EPOLL-EPOLL_WAIT返回多次

客户端发送1M数据,需要保存中间状态,接收多次,在EPOLL_WAIT返回后,接收线程还在处理上次epoll_wait返回的事件中,这时epoll_wait又返回事件了,导致另外一个线程也开始接收同一个客户端同一次发送的数据,导致客户端发送的数据保存乱掉,若数据的最前面携带数据的长度的话,就会导致数据永远无法接收完毕。解决这个问题我用的方法是在接收到epoll_wait返回的某个套接字的事件时,从epoll fd中使用epoll_ctl del删除此套接字的注册,然后处理完毕此套接字的事件后又重新注册套接字事件。但是这时又出现另外一个问题,就是epoll_ctl add时有时候会失败,导致套接字未被注册上,导致这个套接字的事件永远无法再被接收。目前还没有查明为什么会注册失败,注册失败后,连续注册三次的规避措施也会失败,可打印注册失败原因,errno值来确定失败原因,再调整代码。

你可能感兴趣的:(c/c++,linux/unix)