我的linux应用程序正在执行非阻塞TCP连接系统调用,然后用于epoll_wait检测三次握手完成.有时epoll_wait返回同时为同一套接字描述符设置的POLLOUT&POLLERRevents.
我想了解TCP级别的情况.我无法按需复制它.我的猜测是,在epoll_wait我的事件循环内部的两个调用之间,我们有一个SYN + ACK/ACK/FIN序列,但我再次无法重现它.
如果连接失败,可能会发生这种情况 - 例如,"连接超时"(对于执行非阻塞连接的套接字,POLLOUT当连接操作完成成功和不成功结果时,将设置).
当POLLOUT为套接字设置时,用于getsockopt(sock, SOL_SOCKET, SO_ERROR, ...)检查连接是否成功(SO_ERROR在这种情况下套接字选项为0,否则表示连接失败的原因).