如果网络脱机启动,socket.getaddrinfo将失败

时间:2015-10-09 15:51:56

标签: python python-2.7

我遇到了一个Python脚本问题,应该检查用户是否连接到带有强制网络门户的wifi网络。具体来说,脚本是长时间运行的,尝试每隔60秒连接到example.org。

问题是,如果网络启动离线(意味着在脚本开头没有连接wifi),socket.getaddrinfo始终失败即使连接了wifi,也会出现错误“名称或服务未知”,直到重新启动Python脚本。 (这不是DNS的事情 - 所有请求都失败了。)

由于urllibrequests都使用sockets,因此一旦Python进入此状态,就无法下载示例页面。

是否有解决方法或重置sockets的方法,以便在网络出现故障后正常运行?

要清楚,这是一个复制品:

  1. 断开wifi连接
  2. 运行交互式Python会话
  3. import urlliburllib.open("http://stackoverflow.com/") - 按预期失败
  4. 重新连接wifi
  5. urllib.open("http://example.com/")
  6. 预期:从example.com返回HTML 实际:socket.gaierror: [Errno -2] Name or service not known

1 个答案:

答案 0 :(得分:-1)

如果您在运行脚本时未连接到接入点,并且没有为您的设备分配IP地址socket.getaddrinfo将失败。也许它在您运行脚本时仍然可以连接。无法解析域名,因为您未连接到网络,因此没有DNS。

当您实际连接到网络时是否会失败?脚本失败时curl http://icanhazip.com是否有效?或者,如果您运行ifconfig,您的设备是否有IP? (我假设你在* nix框上)。