TCP客户端未检测到服务器断线

问题描述 投票:0回答:1

我有一个 .Net TCP 客户端,它连接到 Telnet 服务器(目前,通过本地主机进行测试):

tcpClient.ReceiveTimeout = 300;
tcpClient.SendTimeout = 300;
tcpClient.NoDelay = true;
LingerOption lingerOption = new LingerOption(true, 0); 
tcpClient.LingerState = lingerOption;

tcpClient.Connect(address, port);

连接到服务器后,客户端无法检测到服务器发起的断开连接(例如服务器应用程序已关闭套接字或服务器进程已终止)。

服务器关闭后,我可以在 Wireshark 中看到其 FIN-ACK 和客户端的 ACK,但客户端套接字和 TcpClient 对象仍保持连接状态。

添加 keep-alive 没有帮助 - 我在 FIN-ACK 之后不断收到 keep-alive 响应。

唯一能让我立即检测到服务器断开连接的是定期写入套接字,这在我的情况下是不可接受的,因为它会用垃圾污染连接。

我是否在套接字/客户端配置中遗漏了某些内容?

.net sockets winsock
1个回答
0
投票

当服务器优雅地关闭连接(即发送

FIN
)时,客户端套接字将进入可读状态,并且该套接字上的后续读取将报告成功并收到 0 个字节。这是检测套接字关闭的典型方法。

© www.soinside.com 2019 - 2024. All rights reserved.