发布于2019-10-07 19:27 阅读(3994) 评论(0) 点赞(1) 收藏(4)
我在ubuntu机器上使用python 2.7。
客户端尝试连接到服务器。我得到了EINPROGRESS,它可以用于非阻塞套接字。
要检查连接是否成功,我做了{connect}的手册页建议的操作:
# 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)
当服务器脱机时,这给了我ECONNREFUSED。到现在为止还挺好。
连接失败时,我想再试几次。
问题:我第二次尝试连接同一套接字时,{connect}给我发送了ECONNABORTED。这个不在{connect}的手册页中。这是什么意思?
ECONNABORTED
在Linux Kernel Source Socket Code的两个地方设置。
按照errno
手册页和/include/asm-generic/errno.h
#define ECONNABORTED 103 /* Software caused connection abort */
第一个是accept4
在/net/socket.c中定义syscall的函数中。
相关源代码
1533 if (upeer_sockaddr) {
1534 if (newsock->ops->getname(newsock, (struct sockaddr *)&address,
1535 &len, 2) < 0) {
1536 err = -ECONNABORTED;
1537 goto out_fd;
1538 }
1539 err = move_addr_to_user((struct sockaddr *)&address,
1540 len, upeer_sockaddr, upeer_addrlen);
1541 if (err < 0)
1542 goto out_fd;
1543 }
逻辑的相关说明如下。
如果定义了来自用户空间的对等套接字的地址,并且如果新套接字没有名称,则将错误状态设置为ECONNABORTED
并转到标签out_fd
。
所述第二是在定义该符号的功能inet_stream_connect
在/net/ipv4/af_inet.c。
相关源代码
645 /* Connection was closed by RST, timeout, ICMP error
646 * or another process disconnected us.
647 */
648 if (sk->sk_state == TCP_CLOSE)
649 goto sock_error;
662 sock_error:
663 err = sock_error(sk) ? : -ECONNABORTED;
664 sock->state = SS_UNCONNECTED;
665 if (sk->sk_prot->disconnect(sk, flags))
666 sock->state = SS_DISCONNECTING;
667 goto out;
逻辑的相关说明如下。
转到sock_error
标签的唯一代码inet_stream_connect
是检查套接字是否被RST,超时,另一个进程或错误关闭了。
在sock_error
标签中,如果我们可以恢复套接字错误报告,请这样做,否则将错误状态更改为ECONNABORTED
像Celada的评论一样,我也建议每次打开一个新的套接字。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/133140/2349418f97111a636d41/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!