2009-11-15 40 views
0

我最近开始在Linux下学习网络编程,看来我无法找出正确的方法来检测是否建立了与远程主机的连接。 ATM所有未建立的连接都在epoll实例中注册。一旦EPOLLOUT标志设置为1的事件到达,连接就被标记为已建立。像这样容易,但我做对了...检测连接是否已建立

有没有更好的方式做到这一点?如果不是,等待套接字是否可写是确保连接已建立的好方法?

+0

请向我们展示您用于连接的代码。 – bmargulies

回答

0

poll/epoll/select应该都可以工作。 connect(2)的手册页说您得到EINPROGRESS,并且您可以使用select或poll来检测它是否可写,从而检测完成。然后使用getsockopt检查SOL_SOCKET,SO_ERROR状态,以查看连接是成功还是失败。

如果您在尝试连接时重试连接,则会得到EALREADY。

所以这是记录的方式来做到这一点,并听起来对我来说是正确的。