Visual Studio 2008 C#.NET3.5アプリケーションをWindowsXPSP3x86で実行しています。私のアプリケーションには、OnSendTask
複数のスレッドから同時に呼び出すことができるイベントハンドラーがあります。リモートホストへのTCP接続を開き、データを送受信します。
例えば:
/// <summary>
/// prevent us from exceeding the maximum number of half-open TCP
/// connections in Windows XP.
/// </summary>
private System.Threading.Semaphore tcp_connection_lock_ =
new System.Threading.Semaphore(10, 10);
public event EventHandler<SendTaskEventArgs> SendTask;
private void OnSendTask(object sender, SendTaskEventArgs args)
{
try
{
tcp_connection_lock_.WaitOne();
using (TcpClient recipient = new TcpClient())
{
// error here!
recipient.Connect(args.IPAddress, args.Port);
using (NetworkStream stream = recipient.GetStream())
{
// read/write data
}
}
catch
{
// write exceptions to the logfile
}
finally
{
tcp_connection_lock_.Release();
}
}
void SendTasks(int tasks_to_send)
{
using (ManualResetEvent done_event = new ManualResetEvent(false))
{
int countdown = tasks_to_send;
for (int i = 0; i < tasks_to_send; ++i)
{
ThreadPool.QueueUserWorkItem((o) =>
{
SendTaskEventArgs args = new SendTaskEventArgs(/*...*/);
EventHandler<SendTaskEventArgs> evt = SendTask;
if (evt != null)
evt(this, e);
if (Interlocked.Decrement(ref countdown) == 0)
done_event.Set();
}, i);
}
done_event.WaitOne();
}
}
残念ながら、私は時々このエラーを目にします:
System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.16:59596
at System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
情報のいくつかのポイント:
- 40台のリモコンにタスクを送信すると、6時頃からこの応答が表示されます。
- Wiresharkトレースは、PCからリモートへのTCP接続を開始する試みさえ示していません。
- PCからリモートにpingを実行して、一貫した良好な応答を得ることができます。
- リモートはすべて、このアプリケーションを実行しているPCと同じスイッチとサブネット上にあります。邪魔になるような派手なネットワーキングはありません。
誰かがこのエラーを引き起こしている可能性があるもの、または私がそれを修正する方法を提案できますか?
ありがとう