OS:windows 2003 server 
三层架构:客户端程序 + socketConnection + (scksrvr + 服务器应用程序) + SQL Server 2005
由于业务比较简单,我将scksrvr及服务器应该程序集合在一起.现在的问题是,当网络非法断开时报10054错误(远程主机强迫关闭了一个现有的连接 (10054), on API 'recv' ).然后,所有的客户端程序都连接不上全部报10054错误,必须要关闭服务器应用程序再打开才可以重新连接.我分为用了以下四种方法,试图在服务器端捕捉产生10054的异常,均没有成功.-.用TServerSocket.OnClientError
TSocketDispatcher = class(TServerSocket) 
OnClientError := MyServerSocketClientError; 二.overload TServerClientThread.HandleError
TSocketDispatcherThread = class(TServerClientThread, ISendDataBlock) 
procedure HandleError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);overload;三.捕捉THREAD_EXCEPTION 消息
procedure OnMessage(var Msg: TMsg; var Handled: Boolean); 
  if msg.message = THREAD_EXCEPTION then begin
    Handled := true;
    ShowMessage( Exception(msg.lParam).Message);
  end;四.用ApplicationEvents捕捉
procedure TSocketForm.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
  showmessage('Error Raise ' + e.ClassName);
  Raise e;
end;--
现在要解决的问题是,即使客户端异常断开,也可以让其他用户登录,不必重启服务器应用程式,希望高手指教.其实在scksrvr里面非法断开的在60S后会被断开的(RemoveClient),可是客户端就是连不上了.这个异常似乎scksrvr并不会raise,或者说我不知道在哪里产生的.