客户端断开连接时如何检测关闭的TCP连接?
问题描述:
How to detect closed TCP connection when Client disconnected disgracfully i.e sudden power off ?
以下方法当客户断断续续地断开连接时工作。
我尝试过:
Following method don't work when client disconnects disgracefully.
What I have tried:
<pre>if (socket != null)
{
bool part1 = socket.Poll(1000, SelectMode.SelectRead);
bool part2 = (socket.Available == 0);
if (part1 && part2)
{
return false;
}
else
{
return true;
}
}
else
return false;
答
TCP keepalive
这些看起来很有希望,在 .net中回答3 - 即时检测客户端断开服务器套接字 - 堆栈溢出 [ ^ ]
以及此处: http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html [ ^ ]
我希望它有所帮助。
TCP keepalive
These looks promising, answer 3 in .net - Instantly detect client disconnection from server socket - Stack Overflow[^]
and also here: http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html[^]
I hope it helps.
我使用过这样的东西:
I used something like this:
bool connectedLocal = true;
using (var socketTemp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
socketTemp.Connect(ip, port);
// Loop until prg finished or connection is lost.
while (Running && connectedLocal)
{
Thread.CurrentThread.Join(100);
connectedLocal = !(socketTemp.Poll(0, SelectMode.SelectRead) && socketTemp.Available == 0);
}
socketTemp.Close();
}