在重新启动程序之前无法解析URL

时间:2016-02-25 14:28:04

标签: python sockets python-3.x dns

我有一个基本上看起来像这样的python脚本:

#############################
# MAIN LOOP
while True:
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        try:
            client_socket.connect((url, socketnum))
            packet = somedata
            client_socket.sendall(packet)

        except Exception as e:
            # an error occurred
            logging.error("An error occurred: {}".format(e))
            pass
        finally:
            logging.info("Closing socket...")
            client_socket.close()

    time.sleep(70)

我发现如果在计算机(嵌入式Linux系统)上建立互联网连接之前运行此脚本,当然,当套接字尝试连接时,我得到" Errno -3暂时失败名称解析"。但是,如果建立了Internet连接,则程序STILL无法解析主机名 - 使其工作的唯一方法是重新启动python脚本。

由于这个系统不是我可以随时保证互联网连接存在的系统,无论如何让python知道互联网连接现在存在并且名称解析信息现在可用吗?

编辑:一些进一步的测试表明,只有在启动后在计算机上建立任何成功的互联网连接之前启动python程序时才会发生这种情况。如果先前在计算机上建立了互联网连接后启动了python程序(即使它随后已断开连接),程序也能正常运行,并在恢复互联网连接后成功连接到互联网。

所以:

Bootup-> Python开始 - >已建立互联网连接=程序无法正常工作

启动 - >已建立互联网连接 - >互联网已断开连接 - >已启动Python =程序正常运行。

1 个答案:

答案 0 :(得分:0)

尝试在每次迭代中刷新DNS缓存。

import os
... 
while True:
    os.popen('nscd -I hosts',"r")
...

或尝试使用service nscd restart命令。