2015-11-24 66 views
0

我已經創建了一個套接字,將其設置爲非塊狀態,通過getaddrinfo獲得addr,連接,然後將其添加到EPOLL中,並通過EPOLLIN | EPOLLOUT標誌。 在我的下一次epoll_wait迭代時,它立即被觸發爲EPOLLOUT,但是當我嘗試寫\發送數據時,我得到一個EINPROGRESS(115)錯誤。 任何想法都會有用。由於無法通過epoll-client發送數據

編輯0: 我使用LT epoll的

編輯1: 問題是無效的。我認爲當連接完成後,它會觸發EPOLLIN作爲監聽套接字,但會觸發EPOLLOUT。 謝謝你的答案

+0

'connect'完成了嗎? – user58697

+0

你是說'write'還是'send'返回-1並且立即檢查'errno'返回'EINPROGRESS'?你可以向我們展示從調用到'write'或'send'到檢測到'EINPROGRESS'條件的代碼的代碼嗎?你確定'errno'不僅僅是從前一次調用connect到'EINPROGRESS',並且當沒有錯誤時你檢查了'errno'? –

回答

0

你正在得到EINPROGRESS(這不是一個錯誤),因爲套接字被設置爲非阻塞......所以它根本沒有阻塞。您確定要將其設置爲「非阻止狀態」嗎?

使用像epoll之類的東西的目的是通過被告知何時可以安全地使用套接字來避免整個阻塞問題。