我的 linux 应用程序正在执行非阻塞 TCP 连接系统调用,然后使用 epoll_wait
检测三向握手完成。
有时 epoll_wait
返回同时为同一套接字描述符设置的 POLLOUT
和 POLLERR
事件。
我想了解 TCP 级别的情况。我无法按需复制它。我的猜测是,在我的事件循环中对 epoll_wait
的两次调用之间,我们有一个 SYN+ACK/ACK/FIN 序列,但我还是无法重现它。
最佳答案
如果连接失败,则可能会发生这种情况 - 例如“连接超时”(对于执行非阻塞连接的套接字,POLLOUT
在连接操作完成时设置对于成功和不成功的结果)。
当 POLLOUT
设置为套接字时,使用 getsockopt(sock, SOL_SOCKET, SO_ERROR, ...)
检查连接是否成功(SO_ERROR
在这种情况下,套接字选项为 0,否则指示连接失败的原因。
关于linux - 非阻塞 tcp 与 epoll 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875002/