gpt4 book ai didi

tcp - Berkley sockets 关闭函数,有多重要?

转载 作者:可可西里 更新时间:2023-11-01 02:36:50 24 4
gpt4 key购买 nike

作为背景,我有一个嵌入式设备可以通过 IP 与第三方服务器通信。第三方服务器中的代码不太可能更改。在最近的一个版本中,我将 ip disconnect 函数更改为在调用 close() 之前调用 shutdown()(之前它只是调用了 close())。如果发生某些中断,嵌入式设备会在未完成通信 session 的情况下断开连接。当这种情况发生在 session 中的错误点时,服务器现在会生成一个跟踪文件,由于各种原因,客户无法接受该文件。这仅在调用关闭时发生,服务器将其视为发送失败错误(并生成跟踪文件),同时将更突然的 close() 视为不需要跟踪的另一端断开连接错误。

所以显而易见的解决方案是停止调用 shutdown。巴恩斯先生在这个 question 中的回答对这两个函数进行了很好的描述,但是,如果您知道只有一个进程附加到特定套接字,是否有任何理由在关闭前使用 shutdown?

谢谢,帕特里克

最佳答案

在我看来,“突然断开连接”似乎已成为您通信协议(protocol)的一部分,这可不是什么好事。如果客户端在“某些中断发生”后运行了很长时间,以决定是否使用 shutdown()close() 并影响另一端看到的内容,最好更新您的协议(protocol)以可靠地传递“此 session 已中止消息”。

也就是说,听起来好像这个系统(即所有交互软件)已经(在服务器上)卡住得很厉害,以至于这种变化永远不会发生。可能你想做的,而不是弄清楚问题到底是什么,是让经理签署一个快速而肮脏的“只需使用 close()”解决方案,在向他说你真的不确定这会产生什么其他影响,但以前的事情似乎确实运行良好。 (您没有注意到任何其他错误在您进行更改后消失,是吗?)

决定是否进行可能代价高昂的搜索以查看这里真正发生的事情,以及与负责维护该软件的另一端的某个组织进行的潜在代价高昂(政治上,如果不是财务上),这实际上是一项管理决策,不是技术性的,尽管要正确制作它需要了解技术风险。

关于tcp - Berkley sockets 关闭函数,有多重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011868/

24 4 0
文章推荐: java - 如何在 Netty 中分块 List