linux socket connect [error:EINPROGRESS]一般会在什么情况下产生?

发布于 2022-09-01 06:01:47 字数 1043 浏览 22 评论 0

ret = connect(fd, (struct sockaddr*)&server, sizeof(server)));

调用connect然后返回-1,查了下文档是这么说的

EINPROGRESS


----------


The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure).

现在疑惑的是在哪些情况下connetc有可能会返回EINPROGRESS,以及对于这种情况我做如下的处理是否得当?

int err = -1;
socklen_t len = sizeof(int);
if (getsockopt(fd,  SOL_SOCKET, SO_ERROR ,&err, &len) < 0 ){
        close(fd);
        logError("errno:%d %s\n", errno, strerror(errno));
}

if (err){
        errno = err;
        close(fd);
        logError("%d :Get socketopt err: %d", __LINE__, err);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白色秋天 2022-09-08 06:01:48

非阻塞的socket,connect调用后立即返回,连接过程还在执行

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文