单位上一个用于通讯的服务器上的程序出了问题:
服务器程序使用UDP服务端,用的是异步Socket模式,服务器刚搭建好的时候没什么问题,最近由于通讯客户端增多(da大概1500个左右)后,出现这样的问题:
mySocket.Bind(ipe);
mySocket.BeginReceiveFrom(obj.buffer,0,UdpTranslateObj.BUFFER_SIZE,SocketFlags.None,
ref obj.endPoint,new AsyncCallback(ReceiveCallBack),obj);
private void ReceiveCallBack(IAsyncResult ar)
{
UdpTranslateObj obj = (UdpTranslateObj)ar.AsyncState;
try
{
int k = obj.udpSock.EndReceiveFrom(ar,ref obj.endPoint);
if(k > 0)
{
ReceiveEventArgs e = new ReceiveEventArgs();
e._ReceiveBytes = new byte[k];
Array.Copy(obj.buffer,0,e._ReceiveBytes,0,k);
e._RemoteEndPoint = obj.endPoint;
OnReceive(e);
}
}
catch(SocketException oe)
{
if(oe.ErrorCode == 10054 )
{
if(this.ActiveSymbol)
{
try
{
obj.udpSock.BeginReceiveFrom(obj.buffer,0,UdpTranslateObj.BUFFER_SIZE,SocketFlags.None,
ref obj.endPoint,new AsyncCallback(ReceiveCallBack),obj);
}
catch
(Exception oee)
{
this.mySocket.Close();
this.mySocket = null;
System.Threading.Thread.Sleep(500);
Start();
return;
}
}
}
}
catch(Exception oe)
{
WriteErrLog("UDP接收错误:" + oe.ToString());
}
if(this.ActiveSymbol)
{
try
{
obj.udpSock.BeginReceiveFrom(obj.buffer,0,UdpTranslateObj.BUFFER_SIZE,SocketFlags.None,
ref obj.endPoint,new AsyncCallback(ReceiveCallBack),obj);
}
catch
(Exception oe)
{
this.mySocket.Close();
this.mySocket = null;
System.Threading.Thread.Sleep(500);
}
}
}
问题:程序启动时没问题,大概运行2~3小时后出现这个问题
使用sock.BeginReceiveFrom后未执行回调函数ReceiveCallBack
不知道怎么回事?
2007-10-22:
怀疑一:程序中其它地方投递的异步操作太多,以至于windows操作系统线程池被占满而得不到执行? 此怀疑尚未证实..
评论