这不是关于如何做到这一点的问题,而是关于我正在做的事情是否错误的问题。我读过,在等待数据(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
}
}
现在,由于我已经阅读了这并不容易,我想知道我的方法是否有问题。有没有?还是杀死过程和拉电缆等有区别?