这是拓扑:
-----s0---s1-----
h1 --| |--h2
-----s2---s3-----
h1以可靠的方式使用UDP将文件泵送到h2。 s0和s1之间的链接可能已关闭。然后它应该继续仅使用底部路径发送数据。有没有办法检测链接是否已关闭?
到目前为止,我在h1中创建了两个python套接字,并在每个路径中创建了两个h2。使用select.select我可以使用就绪套接字来读取ack。如果发生超时,我可以重新发送。但是,当链接断开时,我无法知道它已关闭。
答案 0 :(得分:3)
如果 从头开始执行此操作,无论出于何种原因;
尝试ping否则,等待确认;如果你不这样做超时 在一段时间内收到确认;尝试另一条路。任何原因 你没有使用TCP?基本上在UDP上实现可靠性 什么TCP是IP。
有关如何建立TCP握手的说明和指南,请参阅The 3-way handshake。
您还可以考虑使用SCTP这是一种多宿主,基于流的传输控制协议。相当多的平台支持它,包括Linux,BSD,Windows等。
这很简单:
import socket
import sctp
sk = sctpsocket_tcp(socket.AF_INET)
sk.connect("10.0.1.1")
并实现与socket
相同的大多数接口