我有一个在 win7 电脑上运行的 python 应用程序。它连接到在 Zynq(Arm 核心 0)上作为裸机应用程序运行的 TCP/IP“回声”服务器。python 应用程序出现,打开一个套接字并与 echo 应用程序交换数据(根据来自 PC 的字符串,它被修改为返回有用的信息)。如果python应用程序被关闭,然后重新打开。一切皆好。新的套接字使用正确。但是如果python应用程序没有关闭,而是继续运行并决定关闭对ZYnq打开的socket,然后决定用ZYnq打开一个新的socket,就会出现问题。我确保 Python 套接字已关闭(甚至在关闭之前尝试了“shutdown()”)。服务器端的 LwIP 中似乎有一些东西挥之不去(可能在为使用 LwIP 而编写的赛灵思库中)。从 PC 端使用第二个插座是不可靠的。ZYnq 应用程序内部会出现奇怪的延迟。解决方法是完全关闭 Python 应用程序。
我注意到在 Python 应用程序仍在运行时关闭 Python 应用程序和关闭套接字之间的一个区别:在 Win7 下从正在运行的 Python 应用程序关闭套接字时,recv_callback() 函数注册为在 echo 应用程序中运行Zynq 使用空指针调用。这是唯一一次使用空指针调用 recv_callback() 。我不知道这是否重要。目前,我将阻止用户关闭正在运行的 Python 应用程序的连接,而是强制用户关闭应用程序以正确关闭连接(或正确重置 LwIP 库中的某些内容)。