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