如何在C#中中止套接字

时间:2009-06-30 19:27:53

标签: c# .net sockets

我正在尝试中止套接字连接,以便另一端的客户端将获得“WSAECONNABORTED(10053)软件导致的连接中止”。轮询连接时出现错误消息。

Close()和Shutdown()将正常断开连接。我不想要一个优雅的断开连接。我想做一次Abort,以便客户感觉到出了什么问题。

谢谢,

编辑:我正在编写服务器代码,我想将套接字中止到连接客户端

7 个答案:

答案 0 :(得分:2)

我设法模拟了这种情况:

进行正常的正常断开连接:

你这样做:

socket.Shutdown(SocketShutdown.Both);
socket.Close();

但是,要做中止,你可以:

socket.Shutdown(SocketShutdown.Send);
socket.Close();

我认为不同之处在于客户端不会收到任何ACK数据包,并认为计算机重置或其他什么。

答案 1 :(得分:2)

这里详细描述了基础细节,包括强制中止连接的时间(https://stackoverflow.com/a/13088864/1280848)。

这样做的C#方式是:

socket.LingerState = new LingerOption(true, 0);
socket.Close();

即,将SO_LINGERTIME_WAIT = 0

一起使用

答案 2 :(得分:1)

如果您在不调用Close()和/或Shutdown()的情况下终止进程和/或重新启动计算机和/或拔掉以太网电缆,该怎么办?

答案 3 :(得分:0)

我不认为除了让客户端发送间歇性保持活动之外,还可以通过.Net Socket实现获得所需的行为。我已经尝试了各种各样的事情来获得你描述的行为并最终实现了保持活跃的消息。如果服务器调用Close(),则客户端套接字将在下次尝试发送数据时出现连接中止错误。

答案 4 :(得分:0)

要强制中止连接,您可以执行以下操作:

socket.Close(timeout: 0)

这将立即发送RST。

答案 5 :(得分:-1)

尝试调用EndSend()或EndReceive(),具体取决于紧接着Dispose()的情况

答案 6 :(得分:-1)

您可以尝试编写另一个线程中的所有辅助套接字,并在想要崩溃连接时将其终止。