我有一个基本上看起来像这样的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 =程序正常运行。
答案 0 :(得分:0)
尝试在每次迭代中刷新DNS缓存。
import os
...
while True:
os.popen('nscd -I hosts',"r")
...
或尝试使用service nscd restart
命令。