我写了一个ECHO SERVER,用的是LT触发,在EPOLLIN的时候,通过4K一个BUFFER读数据,当读到的数据大于0,并且小于4K的时候就认为已经读完了,然后触发EPOLLOUT开始写数据。现在问题是当发送的数据长度是4K*N倍的时候,按照上面的逻辑会数据读完,但是没有触发EPOLLOUT,而EPOLL又因为句柄的接收队列上已经没有数据了而不会触发EPOLLIN了,这个是不是很无解??我想了一下,解决我这个问题有几种方法,第一种,如果有检测FD是不是还有数据的方法,但是不读,那我就可以在读到的字节数等于4K的时候检测一下是不是还有数据,如果没有数据了就EPOLLOUT。第二种,先读一个固定大小的头部,然后头部里写了数据的长度,这样根据已经读到的长度就知道是不是需要触发EPOLLOUT。第三种,客户端写数据故意不写BUFFER_SIZE * N大小,通过一些0x0来填充。求个正解的方法。
