Linux, C. Below issue only happens by using epoll(). If I use select() on server socket, there is no data loss.
=============================
Update: I received
event.events = EPOLLIN | EPOLLET;
You are doing edge triggered polling. Which means your last read is probably not reading all the available data. It stops after reading 64k data, even if there is more data available. But the poll will not trigger again due to the edge trigger. Suggest removing EPOLLET
.
break; //I do received 2 errors of Try Again. How to try again?
By going back to your epoll loop.
data: 60734 //??? why I am not able to read all 65536 bytes?
Because they hadn't been received yet.
I think you may miss the big picture on how you do non-blocking I/O with epoll
.
epoll
tells you when there's data.