QUESTIONS

1) Почему я регистрирую EDGE с EPOLLIN | EPOLLOUT, а у меня всегда приходит событие EPOLLOUT? Я правильно понимаю: мы слушаем события, если приходит EPOLLOUT, читаем; записываем в буфер ответ, и когда придет EPOLLIN делаем send? 
2) Как проверить у сокета (или у полера) с чем он зарегистрирован Edge или Level?
3) Какое поведение на возобновляемые ошибки должно быть? Поконкретней, пожалуста.
4) При вызове каких методов сокета могут возникнуть ConnectionError, BlockingIOError? В каком месте их перехватывать?
5) Можна ли узнать у полера, остались ли у него зарегистрированные дескрипторы?