2015-11-24 3 views
0

Я создал сокет, установил его в неблокированное состояние, получил addr by getaddrinfo и связал его, а затем добавил его в EPOLL с помощью EPOLLIN | Флаги EPOLLOUT. На моей следующей итерации epoll_wait она мгновенно запускается как EPOLLOUT, но когда я пытаюсь записать \ отправить данные, я получаю ошибку EINPROGRESS (115). Любая идея была бы полезна. БлагодаряНе удается отправить данные через epoll-client

EDIT 0: Я использую LT Epoll

EDIT 1: Вопрос недействителен. Я подумал, что когда соединение будет закончено, оно вызовет EPOLLIN в качестве слушателя-сокета, но оно вызывает EPOLLOUT. Спасибо за ответы

+0

Был ли «connect» завершен? – user58697

+0

Вы говорите, что 'write' или' send' return -1 и немедленная проверка 'errno' вернула' EINPROGRESS'? Можете ли вы показать нам код из вызова 'write' или' send' до конца кода, который обнаружил условие EINPROGRESS? Вы уверены, что 'errno' был не просто' EINPROGRESS' из предыдущего вызова 'connect', и вы проверили' errno', когда не было ошибки? –

ответ

0

Вы получаете EINPROGRESS (это не ошибка), потому что сокет установлен в неблокирующий ... так что он вообще не блокирует. Вы уверены, что хотите установить его в «неблокированное состояние»?

Точка, использующая что-то вроде epoll, заключается в том, чтобы избежать всей проблемы блокировки, когда ей говорят, когда безопасно использовать сокет.