2015-11-24 55 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之类的东西的目的是通过被告知何时可以安全地使用套接字来避免整个阻塞问题。