Microchip
直播中

王涛

8年用户 1296经验值
私信 关注
[问答]

如何在PIC32 MZ2048 ECG100上运行和声1.04

我正在与XC 1.34在PIC32 MZ2048 ECG100上运行和声1.04。我目前使用TCPIP_TCP_WasReset来检查连接的有效性,但我注意到,如果实际网络电缆被删除而不是关闭连接应用程序,WasReset永远不会设置为真。关闭连接应用程序将将其设置为真。我使用的较老的堆栈在和谐之外检测到了这种情况,发生了什么?是否有另一种方法来检测这一点。在这种情况下,我的套接字似乎永远保持打开状态,使我无法使用套接字。

回帖(19)

余少华

2020-5-14 12:01:57
我在Oracle 1.03Y001中遇到了同样的问题,在这种情况下,网页上有一个运行Ajax的Web服务器。我有6个http套接字,超过2-3天它们就锁定了,我想可能是因为我在ajax事务中关闭了我的浏览器,但是我也可以通过反复断开电缆来触发它。我的“修复”是向TCP .C添加一个函数来返回套接字TCP状态。然后,我从http任务中调用并检查它,如果套接字卡住了超过40秒,发出一个TCPIP_TCP_Abort并清理http套接字。到目前为止,Web服务器上没有更多的锁定。不幸的是,我没有时间检查1.06.02以查看它是否被修复。
举报

褚溢稚

2020-5-14 12:08:00
我通过在套接字上设置KePiVal活性选项来解决这个问题。
举报

毕凯

2020-5-14 12:22:45
我记得,TCP应该是这样工作的,因为它允许连接从间歇连接问题中恢复。也就是说,如果您拔出电缆并重新插入它,那么TCP堆栈应该恢复并继续传输数据。您可以使用TCP.-alive或最好是应用程序级别的周期性心跳来确保对等点仍然存在。如果希望在拔掉电缆时关闭连接,那么应该能够使用TCPIP_STACK_NetIsLin.(TCPIP_NET_HANDLE h)来检查是否存在该连接。我们过去在旧的MLA堆栈中使用TCP.-alives,但是有一些奇怪的问题,其中LabVIEW/Windows即使在发送.-alives时关闭连接之后仍然保持连接打开,所以我们改为应用程序级的心跳,并且这种奇怪没有返回。可能还有别的事情发生,但是我们找不到。
举报

余少华

2020-5-14 12:32:51
我发现堆栈进入一个插座没有恢复的位置,它永远保持锁定(直到一个板重置)。那不可能是正确的行为。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分