Python Can';在程序重新启动之前,请不要解析URL

Python Can';在程序重新启动之前,请不要解析URL,python,sockets,python-3.x,dns,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

我有一个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系统)上建立internet连接之前运行此脚本,那么当套接字尝试连接时,自然会得到“Errno-3名称解析暂时失败”。但是,如果随后建立了internet连接,程序仍然无法解析主机名-使其工作的唯一方法是重新启动python脚本

由于这个系统不是一个我可以保证始终存在internet连接的系统,因此有没有办法让python意识到internet连接现在存在,并且名称解析信息现在可用

编辑:一些进一步的测试表明,只有在启动机器后,在成功建立internet连接之前启动python程序,才会发生这种情况。如果python程序是在先前已在计算机上建立internet连接后启动的(即使随后已断开连接),则该程序将正常运行,并在恢复internet连接后将成功连接到internet

因此:

启动->Python已启动->已建立Internet连接=程序不工作


启动->建立Internet连接->断开Internet连接->启动Python=程序运行正常。

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

import os
... 
while True:
    os.popen('nscd -I hosts',"r")
...
或者尝试使用
服务nscd重新启动
命令