我创建了一个套接字,将其设置为非阻塞状态,通过 getaddrinfo 获取地址,连接,然后使用 EPOLLIN | 将其添加到 EPOLL | EPOLLOUT 标志。 在我的 epoll_wait 的下一次迭代中,它立即被触发为 EPOLLOUT,但是当我尝试写入\发送数据时,我收到 EINPROGRESS(115) 错误。 任何想法都会有用。谢谢
编辑0: 我正在使用 LT epoll
编辑1: 问题无效。我认为当连接完成时,它会像侦听器套接字一样触发 EPOLLIN,但它会触发 EPOLLOUT。 谢谢各位的解答
您收到 EINPROGRESS (这不是错误),因为套接字设置为非阻塞...所以它根本不阻塞。您确定要将其设置为“非阻塞状态”吗?
使用 epoll 之类的东西的目的是通过被告知何时可以安全使用套接字来避免整个阻塞问题。
EINPROGRESS 不是错误,它意味着您已经启动了非阻塞连接。正确编写的方法之一是将fd附加到写入fd上并添加回调。当套接字准备好时,您将收到回调,您必须使用以下命令检查套接字的状态:
getsockopt(sock, SOL_SOCKET, SO_ERROR, &result, &len)
检查 result != 0 并且 getsockopt 也不会返回任何错误,然后进行正常处理。