【发布时间】:2016-02-25 14:28:03
【问题描述】:
我有一个基本上看起来像这样的 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 连接,程序仍然无法解析主机名 - 让它工作的唯一方法是重新启动 python 脚本。
由于这个系统不是我可以保证始终存在互联网连接的系统,是否有办法让 python 意识到互联网连接现在存在并且名称解析信息现在可用?
编辑: 一些进一步的测试表明,只有在启动后在机器上建立任何成功的互联网连接之前启动 python 程序时才会发生这种情况。如果python程序是在机器上之前建立了互联网连接之后启动的(即使它后来被断开了),程序会正常运行,并在互联网连接恢复后成功连接到互联网。
所以:
Bootup->Python 已启动->Internet 连接已建立 = 程序不工作
启动->Internet 连接已建立->Internet 已断开->Python 已启动 = 程序运行正常。
【问题讨论】:
标签: python sockets python-3.x dns