【发布时间】:2010-11-03 22:55:35
【问题描述】:
作为背景,我有一个通过 IP 与第三方服务器通信的嵌入式设备。第三方服务器中的代码不太可能更改。在最近的一个版本中,我将 ip disconnect 函数更改为在调用 close() 之前调用 shutdown()(之前它只是调用了 close())。如果发生某些中断,嵌入式设备会在未完成通信会话的情况下断开连接。当这种情况发生在会话中的错误点时,服务器现在正在生成一个跟踪文件,由于各种原因,该文件对客户来说是不可接受的。这仅在调用 shutdown 时发生,服务器将此视为发送失败错误(并生成跟踪文件),而将更突然的 close() 视为不需要跟踪的另一端断开连接错误。
所以显而易见的解决方案是停止调用关机。 Barnes 先生在question 中的回答很好地描述了这两个函数,但是,如果您知道只有一个进程连接到特定套接字,那么是否有任何理由在关闭之前使用关闭?
谢谢, 帕特里克
【问题讨论】:
-
您在嵌入式设备和第三方服务器上使用什么 TCP 堆栈?并非所有 TCP 堆栈都具有相同的行为 w.r.t。
shutdown与close。另外,您是否设置了SO_LINGER选项? -
如何识别tcp栈?我们确实在最后使用 SO_LINGER。
-
首先让我们知道涉及哪些操作系统(或库)和版本。
标签: tcp berkeley-sockets