C# Socket使用poll函数判断连接断开问题
最近在学习c#的网络编程内容,遇到这样一个问题:在服务器端,如何判断客户端的一个连接是否断开?
查找相关资料,得出较好的解决方案是使用socket对象的poll函数。
poll函数分析
下面是poll函数的官方描述:
public bool Poll (int microSeconds, System.Net.Sockets.SelectMode mode);
这是一个确定socket状态的函数。
参数
microSeconds Int32
等待响应的时间(以微妙为单位)。
mode SelectMode
SelectMode枚举类型中的一个,可选类型为SelectRead,SelectWrite,SelectError
返回值
Boolean 基于mode参数中传递的轮询模式值的socket的状态。
问题产生
- 首先,我的问题是从服务器端获得客户端的某个连接是否断开,作为服务器端,是需要对socketClient进行read操作的,因此对于poll函数中的第二个参数,选择SelectRead,这点毋庸置疑。
- 我们来看下,关于SelectRead模式的返回值的官方文档解析:
SelectRead: 如果已调用 Listen(Int32) 并且有挂起的连接,则为 true。