gpt4 book ai didi

python - TCP Connection Reset by peer 和 Transport End Point 未连接

转载 作者:可可西里 更新时间:2023-11-01 02:39:36 26 4
gpt4 key购买 nike

我们在同一台机器上运行一个 TCP 服务器客户端架构,客户端在 127.0.0.1:30008 上连接服务器。我们看到的是,有一段时间 TCP 连接被服务器重置。我们可以清楚地看到,在 tcpdump 跟踪中,服务器发送了 RST 标志。客户端代码是python,服务端代码是C。

  1. 是什么导致服务器发送这个 RST flat? ,此设置用于运行几个月没有任何问题,所以我们很惊讶地看到现在发生了什么。

  2. TCP 服务器通过另一个 UDP 端口从其他服务器获取数据,并通过 TCP 端口 30008 传输到客户端,客户端在 while 循环中监听服务器端口。想知道,这种连接 RST 问题不会发生在 UDP 连接上吗?

  3. 有时我们可以看到服务器正在关闭套接字,因此客户端收到异常“传输端点已关闭”,这是导致这种情况发生的原因。客户与此问题有任何关系吗?

我查看了互联网以查看解决方案,我只能看到这可能是由于服务器和客户端之间存在一些路由器,但在我的情况下并非如此。

请帮我弄清楚服务器发生了什么。

编辑 - 这是示例 tcptrace(“tcpdump -r actual_trace.pcap”的输出)。 tcpdump.log - 您可以在文件末尾看到 RST 标志。此文件包括一个完整的开始到结束的通信跟踪。

谢谢。

最佳答案

您的客户端 localhost.36291 正在响应大小为零的接受窗口,向服务器 localhost.30008 表明它无法接收任何数据。

15:52:59.766558 IP localhost.30008 > localhost.36291: Flags [P.], seq 218350:227950, ack 23328, win 768, options [nop,nop,TS val 2017821166 ecr 2017821158], length 9600
15:52:59.767766 IP localhost.36291 > localhost.30008: Flags [P.], seq 23328:23362, ack 227950, win 0, options [nop,nop,TS val 2017821167 ecr 2017821166], length 34

这可能是因为您已经填满了客户端中的接收缓冲区,也可能是因为您直到空了才从接收缓冲区中读取数据。

在您的 Python 代码中,当 select 指示文件描述符上有数据时,您必须从文件描述符中读取数据,直到没有数据返回(缓冲区清空)。将套接字设置为非阻塞,读取直到EAGAIN/EWOULDBLOCK

关于python - TCP Connection Reset by peer 和 Transport End Point 未连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com