【发布时间】:2009-09-09 18:08:32
【问题描述】:
我正在尝试找出当前是否连接了 Socket - 根据 Socket.Connected 的 MSDN 文档 - 我应该执行以下操作:
// 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);
我已经通过将套接字连接到在 Windows 上运行的远程服务器并终止远程服务器来测试它是否可以正常工作。
但是,如果我对运行在 Unix 上的远程服务器(在本例中为 MAC OS X)执行相同操作,则代码不起作用 - client.Send(tmp, 0, 0) 调用完成而不会引发异常并打印“已连接:true”。
我猜这与连接的另一端已关闭的事实有关,因此发送可能仍然有效,但接收会失败 - 我可以做一个零字节接收或其他什么来看看套接字已关闭?
【问题讨论】: