Windows套接字的竞争条件

时间:2017-03-17 13:57:15

标签: windows sockets winapi tcp tcp-ip

我有一个奇怪的问题,只出现在一些特定的Windows版本中(遗憾的是我没有这样的Windows版本,但只有用户可以看到这个问题的错误报告)。

我在做什么:我通过TCP / IP从客户端应用程序(在PC上)向嵌入式设备发送数据。这是一个线程上下文中的连续数据流,这里总是会收集一堆数据,这样包的大小就会减少1460字节的倍数,以获得最有效的TCP数据包。

现在可以发生停止条件,必须立即做出反应。在这种情况下,使用相同的网络连接向另一个线程发送其他TCP包。该软件包只包含几个字节的有效负载,但发送3..4次以确保设备响应。

两个线程都使用相同的发送函数,但它被互斥锁锁定,因此不会发生并发访问。

现在,在这个用户PC上出现以下问题:当发送停止包时,对同一个套接字的所有后续发送尝试都会失败,系统错误代码为10054(远程端挂起)。令人惊讶的是,嵌入式设备的日志文件清楚地表明连接没有被它关闭。

由于我无法重现这个问题,所以我在黑暗中刺伤。

此问题仅出现在此用户的Windows 7上,在Linux或我的Windows版本(包括Windows 7)中不会出现此问题。因此,任何想法/建议/评论都是受欢迎的:是否存在任何已知的Windows TCP / IP连接以这种方式失败的错误/条件?

感谢您的每一条评论和想法!

0 个答案:

没有答案