转自:http://hi.baidu.com/totrit/blog/item/9e81c67bc718b9e72f73b336.html
因为epoll本身没有明确提出当异步connect成功之后会返回什么样的信号,通过测试有如下结果:
1,当本地还没调用connect函数,却将套接字送交epoll检测,epoll会产生一次 EPOLLOUT | EPOLLHUP, 也就是产生一个值为0x14的events.
2,当本地connect事件发生了,但建立连接失败,则epoll会产生一次 EPOLLIN | EPOLLERR | EPOLLHUP, 也就是一个值为0x19的events.
3,当connect函数也调用了,而且连接也顺利建立了,则epoll会产生一次 EPOLLOUT, 值为0x4,即表明套接字已经可写。
因而,要判断连接建立,只需要判断该套接字有可写属性且仅有可写属性即可。
PS:本例中使用的epoll采用ET模式。

本文探讨了epoll在处理connect函数的不同状态时的行为。详细分析了三种情况:未调用connect时、connect失败时及连接成功时epoll产生的事件类型。通过这些信息可以准确判断套接字的状态。

1万+

被折叠的 条评论
为什么被折叠?



