【发布时间】:2010-11-10 13:16:32
【问题描述】:
2h 后 Socket 应该自行关闭有什么原因吗?我每秒都从这个套接字接收数据,并每 30 秒写回一些微小的“保持活动”数据。
在发送之前,我使用以下方法检查套接字是否仍然连接:
public bool IsSocketReadyForWriting(Socket s)
{
try
{
if (!s.Connected)
{
Log.Info("Socket.Connected was false");
return false;
}
// following line will throw if socket disconnected
bool poll = s.Poll(2000, SelectMode.SelectWrite);
if (!poll)
{
try
{
// if poll is false, socket is closed
Log.Info("poll is false");
this.Close();
}
catch { }
return false;
}
Log.Debug("still connected");
return true;
}
catch (Exception ex)
{
Log.Error("Error while checking if socket connected", ex);
return false;
}
}
大约 2 小时一切正常,然后突然 Socket.Poll 返回 false,并且 Socket 被关闭。
是否有一个设置可以控制这一点,还是我做错了什么?
[编辑]
忘了说:我控制链接的服务器端和客户端。这些都是 C# 应用程序,其中一个创建侦听套接字,另一个打开连接并发送数据。他们在 2 小时内没有问题地进行通信(没有内存泄漏和其他东西),然后套接字关闭。
发生这种情况时,我可以轻松地重新连接套接字,但如果有人知道这可能是什么原因,我只是在徘徊。
【问题讨论】:
-
测得的超时时间是否正好是 2 小时?或者只是围绕那个?另外,你控制中间的所有网络设备吗?