67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace Plane.Communication
|
|
{
|
|
class TimeOutSocket
|
|
{
|
|
private static bool IsConnectionSuccessful = false;
|
|
private static Exception socketexception;
|
|
private static ManualResetEvent TimeoutObject = new ManualResetEvent(false);
|
|
|
|
public static TcpClient Connect(string serverip, int serverport, int timeoutMSec)
|
|
{
|
|
TimeoutObject.Reset();
|
|
socketexception = null;
|
|
|
|
TcpClient tcpclient = new TcpClient();
|
|
|
|
tcpclient.BeginConnect(serverip, serverport,
|
|
new AsyncCallback(CallBackMethod), tcpclient);
|
|
|
|
if (TimeoutObject.WaitOne(timeoutMSec, false))
|
|
{
|
|
if (IsConnectionSuccessful)
|
|
{
|
|
return tcpclient;
|
|
}
|
|
else
|
|
{
|
|
throw socketexception;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
tcpclient.Close();
|
|
throw new TimeoutException("TimeOut Exception");
|
|
}
|
|
}
|
|
private static void CallBackMethod(IAsyncResult asyncresult)
|
|
{
|
|
try
|
|
{
|
|
IsConnectionSuccessful = false;
|
|
TcpClient tcpclient = asyncresult.AsyncState as TcpClient;
|
|
|
|
if (tcpclient.Client != null)
|
|
{
|
|
tcpclient.EndConnect(asyncresult);
|
|
IsConnectionSuccessful = true;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
IsConnectionSuccessful = false;
|
|
socketexception = ex;
|
|
}
|
|
finally
|
|
{
|
|
TimeoutObject.Set();
|
|
}
|
|
}
|
|
}
|
|
}
|