linux - 非阻塞 tcp 与 epoll 连接

标签 linux tcp epoll

我的 linux 应用程序正在执行非阻塞 TCP 连接系统调用,然后使用 epoll_wait 检测三向握手完成。 有时 epoll_wait 返回同时为同一套接字描述符设置的 POLLOUTPOLLERR 事件。

我想了解 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/

相关文章:

java - 为什么在 Linux 机器上安装 Java 时使用 alternatives 命令

linux - NVIDIA Jetson TX2 中无法识别的命令行选项 '-m64'

linux - 从可执行文件中删除所有符号表和重定位信息的影响?

asynchronous - epoll、poll、threadpool 有什么区别?

c - 边缘触发的非阻塞 epoll 的 SSL_accept 总是返回 SSL_ERROR_WANT_READ

linux - 使用 SLURM 运行多阶段作业

java - 服务器程序即使在不使用时也会占用大量 CPU

Python 音频网络问题

linux - 在 RedHat 5.1 中设置 IGMP 版本 (Tikanga)

NGINX 多次崩溃