这不是一个关于如何做的问题,而是关于我所做的是否有错的问题。我已经阅读过,如果在等待数据(BeginReceive)时,没有使用定时器或定期发送消息等方式,就不能检测到套接字意外关闭(例如杀死服务器/客户端进程,拔掉网络电缆)。但是我已经使用了以下设置相当长的时间来实现此目的,至今一直完美地工作。
public void OnReceive(IAsyncResult result)
{
try
{
var bytesReceived = this.Socket.EndReceive(result);
if (bytesReceived <= 0)
{
// normal disconnect
return;
}
// ...
this.Socket.BeginReceive...;
}
catch // SocketException
{
// abnormal disconnect
}
}
现在,既然我已经阅读了不容易实现的内容,我想知道我的方法是否有问题。是吗?还是结束进程和拔掉电缆等操作之间有区别?