完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我在这里碰到了TCPIP TCP堆栈2.04,我有一个循环打开一个套接字,并使它为mqtt通道打开。例如,这里将打开套接字ID 8。我有另一个循环,它打开一个套接字,从套接字读取,并在命令的基础上关闭它。如果mqtt的套接字8死亡,tcp层会在_TcpSocketKill中杀死它,并且清除TCBStubs[pSkt->sktix]=0;然后将其标记为可打开的beca;use_TCP_Open在该插槽中看到一个空的套接字。因此,在我的例子中,第二个应用程序打开套接字8,而mqtt通道仍然得到一个有效的打开的套接字。这似乎不正确,还是我错过了什么?
|
|
相关推荐
15个回答
|
|
|
我完全同意。但是你说“如果MQTT的套接字8死了,TCP层就杀死它……”这是服务器还是客户端套接字?如果它是一个服务器套接字,那么问题是:为什么/这个套接字关闭被调用到哪里?因为除非应用程序关闭它,否则套接字应该是活动的。-如果这是一个客户端套接字,它可以关闭它自己,因为远程方关闭了。然后,您需要调整套接字的TCPIPPTCPLoceWaITHiTimeOutOutlook定义。将其设置为0,使套接字不会自动关闭本身,而是等待应用程序专门关闭它。但在这种状态下,插座将断开。
|
|
|
|
|
|
它是一个客户端套接字。为什么要让套接字自动关闭并允许自己重新打开,而不需要打开的调用程序专门关闭它?
|
|
|
|
|
|
它是一个文件句柄,它就像FD=open=8,稍后的FD 8在关闭(FD)从不被调用时再次发出。这是麻烦的处方。
|
|
|
|
|
|
有些应用程序可能需要在服务器端关闭连接时自动关闭套接字,而不是轮询套接字以检查这种情况何时发生。这只是一个选项。ED发送数据。
|
|
|
|
|
|
但是没有保证方法来防止Socket ID重用。Linux不能工作,否则会崩溃。套接字可以自动关闭,但在原始调用者关闭或允许重用之前不应该清除套接字。否则,原始用户认为它是可以的,并且你有两个系统使用同一个套接字。
|
|
|
|
|
|
我期望像这里描述的行为,注意重复使用的部分。HTTP:/MAN7.OR/LIUX/MAN-PUESS/MAN2/CONTRO.2.HTMLIN我的想法是,TCP句柄是一种有特权的资源。使用关闭等待超时似乎不是一个好的解决方案。问题之一是tcpip框架句柄与套接字数组索引相同,目前为止这还可以,但是如果与递增句柄解耦,可能更好。因此,这种类型的bug不会在每种情况下都起作用,但我不是这样的。愿意发送我的手表,所以这意味着修补每一个和谐版本。
|
|
|
|
|
|
Runad是一个可以修复这个问题的人,如果它是一个bug。请查明你不是在使用它,还是有bug。
|
|
|
|
|
|
和谐2.04文档说:(在VoLYV PDF页面7086)在这种情况下,但是,这是不正确的,因为资源可能已经被释放之前,所以DOCS是错误的吗?
|
|
|
|
|
|
不确定我明白你的意思。如果套接字是关闭的(即,自动关闭或其他),它就不存在了,故事就结束了。对于这种自动关闭的套接字,用户应该截取套接字关闭信号,如果他们希望知道它是自动关闭的,但是永远不要在那个套接字上调用Close(),除非确定套接字还没有关闭。如果不遵循这个规则,那么肯定会发生坏事。但是使用场景如上所述:不要在这种类型的套接字上调用close,或者至少拦截套接字信号以确保不关闭其他任何东西。这个选项不应该是默认的,是真的。如果它是默认的,我会确保它被改变了。用户必须知道他们在做什么,所以不适用于所有的套接字。2。也许应该对每个套接字应用这个选项,而不是对所有套接字都应用这个选项。我不认为文档是错误的,因为close函数会这样做。
|
|
|
|
|
|
我并没有注意到套接字关闭信号。但是似乎在原始的套接字打开器以某种方式发出信号之前,框架不应该释放套接字以供重用。难道这不能牵扯到一个注册人或类似的人吗?这是马尔写的吗?就我的意思来说,它返回到套接字自动关闭和应用程序层不知道它。
|
|
|
|
|
|
处理程序是否自我取消?
|
|
|
|
|
|
不,MLA没有信号等概念。但是它也有自动关闭的套接字,除了它总是被强制执行,不是可选的。这就是这种套接字应该如何工作的:不是从客户端关闭的,而是从服务器端关闭的。当需要另一个插座时,你打开一个新的插座。如果用户需要这种行为,用户应该知道正确使用它。这就是为什么,我同意,这个选项不应该是默认的。我肯定不会在多线程系统中使用这样的东西,这是肯定的。但是一些简单的应用程序可能会有用。另外,如果配置得当,我们希望旧应用程序仍然以相同的方式运行。同样,它只是一个选项,当对应用程序没有意义时,可以非常容易地禁用它。一旦套接字关闭,注册的处理程序也消失了。
|
|
|
|
|
|
下载文件时,服务器会关闭套接字并在从套接字中读出所有字节之前释放数据包。
|
|
|
|
|
|
谢谢你的报道。我会尝试复制这个问题,看看我得到了什么。
|
|
|
|
|
|
@ Runad,将超时设置为0确实可以防止这种情况发生。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
454 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3529 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
466浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:28 , Processed in 1.202909 second(s), Total 100, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1583