在 Linux 上,我正在寻找一种方法,一旦程序尝试执行网络操作(如果网络连接被禁用,该操作就会失败),即可启用网络连接,而程序甚至没有注意到幕后发生的特殊情况。
更一般地说,有没有一种方法可以在操作系统意识到某个网络操作由于某种原因即将失败时执行 exec() 程序映像,然后等待该程序完成,如果结果是 EXIT_SUCCESS,则尝试再次进行网络操作?
答案1
有没有办法在操作系统意识到某个网络操作由于某种原因即将失败时执行 exec() 程序映像,然后等待该程序完成,如果结果是 EXIT_SUCCESS,则尝试网络操作再次?
不。
使用按需拨号时,它依赖于重试,而重试并非由成功连接触发。维护默认路由,在建立连接之前丢弃数据包,以避免Network unreachable
错误,错误会立即结束,例如 TCP 连接尝试。
我想旧式的按需拨号也依赖于比目前使用的更长的 DNS 超时/重试计数。在现代系统上,它会在 15 秒后放弃,这似乎不够长。
不过,按需拨号完全是一回事,我可以想象这在大多数情况下都是有效的
程序甚至没有注意到幕后发生了一些特殊的事情。
那我该怎么做
如果您尝试挖掘旧代码,我很确定您会发现它专门用于 PPP。这对于某些现代移动数据连接可能有用,也可能没有用。但如果不使用 PPP,则无法使用旧代码。默认路由被分配给网络接口,例如ppp0
,但相应的 PPP 守护程序是使用该ondemand
选项运行的,因此直到需要时才真正建立连接。