当社は、GUIアプリケーション用のネットワークコンポーネント(DLL)を提供しています。
切断をチェックするタイマーを使用します。再接続する場合は、次の呼び出しを行います。
internal void timClock_TimerCallback(object state)
{
lock (someLock)
{
// ...
try
{
DoConnect();
}
catch (Exception e)
{
// Log e.Message omitted
// Raise event with e as parameter
ErrorEvent(this, new ErrorEventArgs(e));
DoDisconnect();
}
// ...
}
}
したがって、問題は、DoConnect()ルーチン内で、SocketExceptionがスローされる(キャッチされない)ことです。キャッチ(例外e)はすべての例外をキャッチするはずですが、どういうわけかSocketExceptionがキャッチされず、GUIアプリケーションに表示されると思います。
protected void DoConnect()
{
//
client = new TcpClient();
client.NoDelay = true;
// In the following call the SocketException is thrown
client.Connect(endPoint.Address.ToString(), endPoint.Port);
// ... (login stuff)
}
ドキュメントは、SocketExceptionがExceptionを拡張することを確認しました。表示されたスタックトレースは次のとおりです。
TcpClient.Connect() -> DoConnect() -> timClock_TimerCallback
したがって、例外はtry/catchブロックの外ではスローされません。
それが機能しない理由はありますか?