Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中进行非阻塞套接字调用以确定连接状态?_C#_Sockets - Fatal编程技术网

如何在C#中进行非阻塞套接字调用以确定连接状态?

如何在C#中进行非阻塞套接字调用以确定连接状态?,c#,sockets,C#,Sockets,套接字上已连接属性的MSDN文档说明如下: 连接属性的值 反映连接的状态 截至最近一次行动。如果 你需要确定电流 连接的状态,请创建一个 非阻塞、零字节发送调用。如果 呼叫成功返回,或 抛出一个Waewold块错误代码 (10035),则插座仍处于活动状态 有联系的;否则,套接字将不可用 连接时间更长 我需要确定连接的当前状态-如何进行非阻塞、零字节的发送调用?该属性的MSDN文档底部的示例(至少是.NET 3.5版本)显示了如何执行此操作: // .Connect throws an exce

套接字上已连接属性的MSDN文档说明如下:

连接属性的值 反映连接的状态 截至最近一次行动。如果 你需要确定电流 连接的状态,请创建一个 非阻塞、零字节发送调用。如果 呼叫成功返回,或 抛出一个Waewold块错误代码 (10035),则插座仍处于活动状态 有联系的;否则,套接字将不可用 连接时间更长


我需要确定连接的当前状态-如何进行非阻塞、零字节的发送调用?

该属性的MSDN文档底部的示例(至少是.NET 3.5版本)显示了如何执行此操作:

// .Connect throws an exception if unsuccessful
client.Connect(anEndPoint);

// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
    byte [] tmp = new byte[1];

    client.Blocking = false;
    client.Send(tmp, 0, 0);
    Console.WriteLine("Connected!");
}
catch (SocketException e) 
{
    // 10035 == WSAEWOULDBLOCK
    if (e.NativeErrorCode.Equals(10035))
        Console.WriteLine("Still Connected, but the Send would block");
    else
    {
        Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
    }
}
finally
{
    client.Blocking = blockingState;
}

 Console.WriteLine("Connected: {0}", client.Connected);

仅仅提供基于经验的附加信息:文档页面3.5版和4版底部的注释描述了我的经验-示例根本不起作用。真希望我知道为什么它对某些人有效而对其他人无效


作为一种解决方法,不管文档怎么说,我将示例更改为实际发送不带标志的1字节。这成功地更新了已连接属性的状态,相当于每隔一段时间发送一个保持活动的数据包。

使用HTTP Keepalive有什么好处吗?