【发布时间】:2019-11-07 16:25:06
【问题描述】:
我正在尝试解决网络中的连接问题,试图了解为什么有些用户可以在开机时立即看到一个框,而其他用户可能需要将近 20 秒才能看到它。它在我们的本地程序中造成了一些致命的问题。
为此,我运行了一个简单的最小可验证 python 脚本来尝试找出发生了什么:
import socket
import time
import errno
HOST = '192.168.1.1'
PORT = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
while(True):
err = s.connect_ex((HOST, PORT))
if err == 0:
print("CONNECTED")
else:
print("NO CONNECTION: {0}".format(errno.errorcode[err]))
time.sleep(2)
当我运行此代码时,我看到一个一致的模式:EAGAIN,后跟 10 个 EALREADY 实例。当它连接时,'CONNECTED' 会替换循环的 EAGAIN 位。
我认为将超时设置为 1 秒并等待 2 秒,应该可以让我更快地在后台中止连接调用,但它似乎没有任何效果。是否有我可以设置的 TCP 选项或我可以调整的 Windows 设置,以确保在轮询远程框以获取连接时不会出现这些尴尬的 20 秒阻塞?
【问题讨论】:
标签: windows python-2.7 sockets