套接字上已连接属性的MSDN文档如下:
连接属性的值反映了最近操作时连接的状态。如果需要确定连接的当前状态,则进行非阻塞的零字节发送调用。如果调用成功返回或抛出WAEWOULDBLOCK错误代码(10035),则套接字仍然连接;否则,套接字不再连接。
我需要确定连接的当前状态--如何进行非阻塞的零字节发送调用?
发布于 2009-09-01 17:47:19
Socket.Connected属性(至少是.NET 3.5版本)的MSDN文档底部的示例说明了如何这样做:
// .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);发布于 2009-09-01 17:42:08
Socket.BeginSend
发布于 2013-02-18 15:16:33
只是提供基于经验的附加信息:Socket.Connect文档页面3.5和4版本底部的注释描述了我的经验--这个例子根本行不通。真希望我知道为什么它对某些人有效,而不是对另一些人。
作为一种解决方案,尽管文档中写着什么,我还是将示例更改为实际发送没有标志的1字节。这成功地更新了已连接属性的状态,并相当于在间隔内发送保持活动的数据包。
https://stackoverflow.com/questions/1363682
复制相似问题